数组与vector比较相似,只是数组大小固定,不能随意增加。
数组定义和初始化,数组元素个数必须是常量表达式
int arr[10]; //代表此数组包含10个int元素
constexpr unsigned sz = 10;
int arr[sz];
int arr2[3] = {0,1,2};
字符数组比较特殊,可以使用字符串字面值进行初始化。
char a1[] = {'a','b','c'};
char a2[] = {'a','b','c','\0'}
char a3[] = "abc";
不能将数组的内容拷贝给其他数据作为初始值和赋值。
int a[] = {1,2};
int a2[] = a; //初始化不行
a2 = a; //赋值不行
数组的元素也能使用for语句或下标运算符进行访问,索引从0开始。使用数组下标的时候通常将其定义为size_t类型。
unsigned scores[11] = {};
for (auto i : scores){
cout << i << endl;
}
定义指向数组的指针,对第一个元素取地址符来获取指向某个对象的指针
string nums[] = {"aa","bb"};
string *p = &nums[0];
string *p2 = nums;
可以使用指针遍历数组元素。
int arr[] = {1,2,3};
int *p = arr;
++p; //指针指向arr[1]
使用指针重写迭代器
int arr[] = {1,2,3};
int *e = &arr[3]; //指向最后元素再往后一个不存在的元素位置
for (int *b = arr;b!=e;++b){
cout << *b << endl;
}
这种方式容易出错,最好使用iterator头文件中的begin和end函数
int a[] = {1,2,3};
int *pbeg = begin(a);
int *pend = end(a);
while(pbeg!=pend)
...
++pbeg;
使用数组初始化vector
int arr = {1,2,3};
vector<int> vec(begin(arr),end(arr));
使用数组的一部分初始化vector
vector<int> subvec(arr,arr+2);