数组

数组声明:typename arrayname[size] = {value1,value2,..};元素个数必须是一个大于0的整型常量,数据类型可以是任意有效的C++数据类型。其中size可以省略,则数组大小和初始化变量个数相同,如int arr[] = {1,2,3};初始化可以省略,如int arr[3];

数组访问:arrayname[num];实现修改,查看;

//声明
int a[4];
int b[3] = {1,2,3};
int i;
std::cin>>i;
int c[i];//会报警告//赋值
int a[4] = {1,2,3};//a[4] = 0
int b[2];
b[0]=1;
b[1] =2;
int c[100];
for(int i = 0; i < 100; i++)c[i] = i+i;

数组特点:必须是在一块连续的内存空间;数组中的每个元素类型相同。

创建数组的其他方法?
—使用new ,delete 关键字,即

//申请
int *arr = new int[3];
int *arr1 = new int[4]{2,1,3,0};
//释放
delete [] arr;

二维数组:
typename arrayname[size][size]={{},{},...};

int a[3][4] = {{0, 1, 2, 3},   /*  初始化索引号为 0 的行 */{4, 5, 6, 7},   /*  初始化索引号为 1 的行 */{8, 9, 10, 11}, /*  初始化索引号为 2 的行 */
};

等价与 int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 即嵌套的括号是可选的。

—使用new关键字创建二维数组:

    //申请int** a = new int*[rows];for(int i=0;i<rows;i++)a[i] = new int[columns];//释放for(int i=0;i<rows;i++)delete []a[i];delete []a;

数组与指针:数组名是一个指向数组中第一元素的常量指针(int const *p;),即数组第一个元素的地址;

int const *p;
int arr[9];
p=arr;

数组的另一种访问方式:
------使用地址访问:*(arr+3)等价与arr[3]

如何将数组传递给函数?
—常用方式是将数组和数组大小分别传递,即

void func(int *arr, int size);//数组传递是地址传递,但传递得只是数组的首地址;
//若不传递数组大小,则在函数内部sizeof(arr) 只是一个int型的大小==4;

如何将数组传递出函数?

int * func();//注意事项:不能返回局部变量的地址;非要返回局部变量,可以将局部变量声明成static
{static int arr[10];...return arr;
}

注意事项:
—在数组声明时,只能使用常量值,不能使用变量值,即

int arr[4];
int num=4;
int array[num]; //会报错

—若非要使用变量值,则可以将其声明为const

const int num = 10;
int array[num];

vector容器:—支持动态扩展
1.构造函数:

vector<T> v;//vector<int> v
vector(v.begin(),v.end());  //将区间[)的元素拷贝给本身
vector(n,elem);//将n个elem拷贝给本身
vector(const vector<T> & vec);
//对应实例
vector<int> v1;//vector<int> v1(10);
vector<int> v2(v1.begin(),v1.end());
vector<int> v3(5,1);
vector<int> v4(v3);
int b[7]={1,2,3,4,5,9,8};
vector<int> a(b,b+7); //从数组中获得初值

2.赋值操作:

vector& operator=(const vector &vec);
assign(beg,end);//[)
assign(n,elem);//将n个elem拷贝赋值;
//对应实例
vector<int> v1(10,1);
vector<int> v2 = v1;
v2.assign(v1.begin(),v1.begin()+2);
vector<int> v3;
v3.assign(3,2);

3.vector容量和大小:

//对应实例
empty(); //判断容器是否为空?
capacity();//容量
size(); //返回容器中的个数;
resize(int num);//重新制定容器长度为num。若容器长度变长,则以默认值填充新位置,若变短,删除超出元素。
resize(int num,elem); //.........//若变长,则以elem填充,......
//对应实例
vector<int> v1(15,2);
bool b = v1.empty();
int cap = v1.capacity();
int size = v1.size();
v1.resize(10);
v1.resize(30,5);

4.插入和删除操作:

push_back(ele);//尾部插入元素ele
pop_back();//删除最后一个元素;
insert(const_iterator pos, ele);//在迭代器指向位置pos处插入元素ele
insert(const_iterator pod, int count, ele);//在迭代器指向位置pos处插入count个元素ele
erase(const_iterator pos); // 删除迭代器指向的元素
erase(const_iterator start,const_iterator end);//删除迭代器start到end之间的元素
clear();//删除所有元素
//对应实例
vector<int> v1(1,2);
v1.push_back(3);
v1.pop_back();
v1.insert(v1.begin(),1);
v1.insert(v1.end(),5,3);
v1.erase(v1.end()-1);
v1.erase(v1.begin()+3,v1.begin()+4);

5.数据的读取操作:

at(int idx); //返回索引idx所指的数据
operator[];//返回索引idx所指向的数据
front();//返回容器第一个数据元素
back();//返回容器最后一个数据元素
//对应实例
vector<int> v1(10,4);
int a = v1.at(4);
int b = v1[4];
int front = v1.front();
int back = v1.back();

6.互换容器:

swap(vector<T> &vec); //将容器vec与本身元素互换;
//实际用途--收缩内存:vector<int>(v).swap(v)//匿名对象
//对应实例
vector<int> v1(3,1);
vector<int> v2(10,2);
v2.swap(v1);

7.预留空间:减少vector在动态扩展容量时的扩展次数

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。在调用默认构造函数后,就使用。
//将容器的容量(capacity)扩充至len,也就是说现在测试capacity();的时候返回值是len.这种操作只有在需要给a添加大量数据的时候才显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能)
//对应实例
vector<int> v1(3,1);
v1.reserve(20);

8.几种重要的算法 —适用于STL
----使用时需要包含头文件:#include<algorithm>

vector<int> a;
vector<int> b(5,2);
a.push_back(3);
...
a.push_back(6);sort(a.begin(),a.end());//对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
reverse(a.begin(),a.end());//对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
copy(a.begin(),a.end(),b.begin()+1);//把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

c++知识点汇总--数组相关推荐

  1. 原生 遍历_细品原生JS从初级到高级知识点汇总(三)

    作者:火狼1 转发链接:https://juejin.im/post/5daeefc8e51d4524f007fb15 目录 细品原生JS从初级到高级知识点汇总(一) 细品原生JS从初级到高级知识点汇 ...

  2. java基础知识大全,java 基础知识点汇总

    java 基础知识点汇总 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个Strin ...

  3. javaSE知识点汇总

    javaSE知识点汇总 Java基础知识精华部分   写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实 ...

  4. php知识点汇总与解答_PHP操作员能力倾向问题与解答

    php知识点汇总与解答 This section contains Aptitude Questions and Answers on PHP Operators. 本节包含有关PHP运算符的 Apt ...

  5. ES6知识点汇总(全)

    ES6知识点汇总(全) 近期在整理ES6相关开发文档,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总. 一.问:ES6是什么,为什么要学习它,不学习ES6会怎么样? 答: ES6是新一代的 ...

  6. Android知识点汇总以及常见面试题

    Android知识点汇总以及常见面试题 1. 链表和数组的区别 2. List Hash 数组的区别 3. 用过哪些三方SDK 4. Android四大组件 5. 堆和栈的区别 6. Activity ...

  7. Java知识点汇总以及常见面试题

    Java知识点汇总以及常见面试题 1. "=="和equals()的区别 2. 构造方法能不能重写或者重载 3. 基本数据类型 4. 匿名内部类能被继承? 5. Integer和i ...

  8. mongodb知识点汇总

    关于本书 作者张友东,阿⾥云⾼级技术专家,主要关注分布式存储与数据库等技术领域,先后参与淘宝分布式⽂件系统TFS.阿 ⾥云数据库(POLARDB.MySQL.MongoDB.Redis ...)等项⽬ ...

  9. OS知识点汇总(考研用)——第二章:进程管理(下)

    OS知识点汇总(考研用)--第二章:进程管理(下)  本文参考于<2021年操作系统考研复习指导>(王道考研),<计算机操作系统教程> 思维导图: 文章目录 OS知识点汇总(考 ...

  10. C# 零基础入门知识点汇总

    C# 零基础入门 知识点汇总 前言 一,基础语法(1~10) 二,流程控制(11~20) 三,数组相关(21~30) 四,函数介绍(31~40) 五,类和对象(41~50) 六,面向对象(51~60) ...

最新文章

  1. 云计算介绍 、TCP/IP协议及配置
  2. BZOJ3769:BST again(记忆化搜索DP)
  3. VLC播放器web插件接口(Part2)
  4. MySQL中in(常量列表)的执行计划
  5. SAP Netweaver后台作业的几种状态
  6. html5控制单片机,10.2 单片机中 PWM 的原理与控制程序
  7. Gartner 组织世界BI大会,PowerBI 与 Tableau 同台竞技
  8. 游戏日志分析2:全方位数据采集
  9. TOP 1%的软件工程师和其他 99%有什么不同?
  10. VMWare Workstation虚拟机 安装Centos7 图文指南
  11. hibernate.hbm.xml必须必须配置主键
  12. 常用软件版本号及软件安装包格式
  13. ztree学习笔记(一)
  14. 【网页设计】基于HTML+CSS+JavaScript制作美食网站舌尖上的美食
  15. 计算机英语中paste表示,计算机英语常用词汇
  16. 键盘计算机编程是什么意思,可编程键盘是什么
  17. 牛腩——SQLhelper
  18. 东京大学招生海报上的那些事(上)
  19. python复制word中的内容,包括格式、图片、文字
  20. java 地图坐标转换_百度地图经纬度和地址互转(Java代码)

热门文章

  1. 3ds max基础知识
  2. 2015062602 - 星际迷航.红杉书评
  3. 老罗如果输了整个民族都输了
  4. 分布式服务治理及优化经验
  5. 腾达ap设置说明_腾达(Tenda)F3无线信号放大模式(Client+AP)设置 | 192路由网
  6. 啥是CTF?新手如何入门CTF?
  7. 【愚公系列】2022年07月 Go教学课程 004-Go代码注释
  8. 如何在Word中用Visio画图
  9. Matlab画图并高清输出到word
  10. poco mysql 登录_POCO数据库操作简介