3.3 数组

//数组算是老熟人了。一种比较古老的数据结构,大小不变,不能随意添加,灵活性较差相比之下,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页中列出),包括解引用、递增、比较、与整数相加、两个指针相减等。用在指针和用在迭代器上意义完全一致。
 
//多维数组省略,没什么意思
 

猜你喜欢

转载自www.cnblogs.com/NK-007/p/9172821.html
3.3