//数组算是老熟人了。一种比较古老的数据结构,大小不变,不能随意添加,灵活性较差相比之下,C++更适用vector
数组的声明、定义
一维数组:a[d]。1.a是数组名;2.d是数组的维度,d必须是常量表达式;3.定义数组需明确指明数组类型,所以不能通过auto定义数组;4.数组元素只能是对象,也就是说不存在引用的数组。
数组的初始化:默认初始化,和显示初始化。其中,对于字符数组的显示初始化需要注意会在数组末尾自动添加‘\0’字符。
数组的拷贝和赋值:不能讲数组的内容拷贝给其他数组作为其初始值,也不能用数组为其他数组赋值。(非常僵硬了
( Ĭ ^ Ĭ ))
当数组和引用指针结合在一起的时候,就会产生复杂的数组声明或者指针/引用声明:
int *ptrs[10]; //ptrs是含有十个整型指针的数组
int &refs[10] = /*?*/; //错误,不存在引用的数组
int (*Parray)[10] = &arr; //Parray指向一个含有十个整数的数组
int (&arrRef)[10] = arr; //arrRef绑定一个含有十个整数的数组
指针和数组
数组具有一个特性:在很多用到数组名字的地方,编译器都会自动将其替换为一个指向数组首元素的指针。由此,在一定情况下,数组的操作实际上是指针的操作。例:
int ia[] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia);
这个过程等价于:
auto ia2(&ia[0]);
为方便设定数组首元素和尾元素的指针,C++11增添了两个标准库函数:begin和end。(是不是很眼熟
(๑¯◡¯๑),不过和vector成员不一样,这两个并不是成员函数)示例代码如下:
int ia[] = {0,1,2,3,4,5,6,7,8,9};
int *beg = begin(ia);
int *last = end(ia);
指向数组的指针可以执行所有的迭代器运算。(在P96和P99页中列出),包括解引用、递增、比较、与整数相加、两个指针相减等。用在指针和用在迭代器上意义完全一致。
//多维数组省略,没什么意思