Fork me on GitHub

数组

显式初始化数组元素

当显式地初始化数组元素时,如果提供的维度比初始值数量大,那么剩下的元素会被初始化为默认值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a[10] = {1 , 2 , 3};   //默认值为0
char a2[10] = "lzc"; //默认值为'\0'
string a3[10] = {"lzc" , "hello" , "world"}; // 默认值为""
for(auto i : a2){
cout<<(i == '\0');
}
cout<<endl;
for(auto i : a){
cout<<i;
}
cout<<endl;
for(auto i : a3){
cout<<(i == "");
}

当显式地用字面值初始化字符数组时,要注意:
1
2
3
4
5
6
char a[] = "lzc";     //结尾有'\0'
char a1[] = {'l' , 'z' , 'c'}; //结尾没有'\0'
char a2[] = {'l' , 'z' , 'c' , '\0'};
char a3[3] = "lzc"; // 错误的,最小是4才能容得下
cout<<(a[3] == '\0')<<endl;
cout<<(a1[3] == '\0')<<endl; //结果虽然是0,但是a1[3]时不存在的

复杂数组的声明

1
2
3
4
5
int *p[10];       //p是容量为10的数组,里面的元素为整形指针(可以从右向左理解)
int &p2[10]; //错误,没有引用的数组
int (*p3)[10]; //可以从内向外理解,首先,p3是一个指针,它指向大小为10的数组,数组中的元素为int
int (&p4)[10]; //同理,p4是一个引用,引用的对象是大小为10的数组,数组中的元素为int
int *(&p5)[10]; //p5是一个引用,引用的对象是大小为10的数组,数组中的元素是整形指针

访问数组元素

使用下标访问

当使用下标时,通常将其定义 为size_t类型,size_t是一个无符号类型

使用begin和end

1
2
3
4
int a[] = {1 , 2 , 3 , 4 , 5};
for(auto i = begin(a) ; i != end(a) ; ++i){
cout<<*i;
}

用string初始化char数组

1
2
string s = "13213123";
const char *str = s.c_str(); // 此函数返回的是const char * 类型

用数组初始化vector

1
2
int arr[] = {1 , 2 , 3 , 4 , 5};
vector<int> v(begin(arr) , end(arr));