1.vector数据结构
vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。
因此能高效的进行随机存取,时间复杂度为o(1);
但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。
另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。

C++中vector为类模板。

vector是类型相同的对象的容器,vector的大小可以变化,可以向数组中增加元素。

2.list数据结构
list是由双向链表实现的,因此内存空间是不连续的。
只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n);
但由于链表的特点,能高效地进行插入和删除。

3、数组

数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。

<1>、定义和初始化内置数组

(1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表达式。定义数组的时,必须指定数组的类型和大小。

(2)初始化时,允许不指明数组的维度,不指明维度,则编译器根据数组初始值的大小推测出维度;若指定维度,则初始值的个数要小于等于维度,当小于时,不足的部分为0(其实还是等于维度)。

1 int a[]={1,2,3};    //数组a的大小为3;
2 int a[5]={1,2,3};    //等价于{1,2,3,0,0},大小为5
3 int a[5]={1,2,3,4,5,6};    //错误,初始值过多

 还有一种特殊的情况:字符数组。当用字符串字面值去初始化数组时,要注意字符串字面值的后面还有一个空字符。也就是说,数组的大小要等于字面值的大小加1。

特别注意:不允许拷贝和赋值------不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值。

1 int a[]={1,2,3};    
2 int a2[]=a;            //错误
3 a2=a;                //错误

 2、访问数组元素

数组的索引是从0开始,如:包含10个元素的数组a,其索引是从0到9而非1到10,若是a[10]则下标越界。

另外,使用数组下标时,其类型是size_t,在头文件cstddef中。


转载自:

https://www.cnblogs.com/shijingjing07/p/5587719.html

https://www.cnblogs.com/love-yh/p/7410666.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐