概述
- 首先,vector类似于数组,有一段连续的内存,有固定的起始地址,可进行随机存取操作,即可以像数组一样用[ ]操作符进行元素的随机访问
- 另外,vector和数组一样,都可以存放任意对象,但除了引用,即不存在引用的数组和引用的vector。
- vector是一个能存放任意类型的动态数组,是动态连续空间是一种顺序的容器(vector也可以看作是向量)
数组对比vector的的缺点
-
首先数组的长度必须是常量表达式,并且在初始化的时候就应该给出来。
-
数组之间不能够进行整体之间的复制,但是vector容器可以进行整体之间的赋值。
-
数组使用的时候下标容易越界,虽然vector也可以使用下标来访问容器中的数据,但是vector可以使用较多的机制来控制,比如用迭代器。
还有一点要说一下,数组名和容器名是有区别的,数组名不仅表示数组的名称,还代表了数组的首地址,数组名有时候可看作指针,并使
用一些类似于指针的操作,例如初始化了一个数组 int a[10];可进行如下操作,a+4、*(a+5)等来访问a中的数据。而容器名的话就仅仅只是
容器的名称了,它没有类似于数组名的那些操作。
最后说一下二者的使用情况,在不需要变长且容量较小的时候用array;需要变长,容量较大的时候就用vector
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int a1[3][3];
int lines1 = sizeof(a1) / sizeof(a1[0][0]);
int row1 = sizeof(a1) / sizeof(a1[0]);
int column1 = lines1 / row1;
cout << sizeof(a1) << endl;
cout << lines1 << "
" << row1 << "
" << column1 << endl;
vector<vector<int>> a(3, vector<int>(3, 0));
int lines = sizeof(a) / sizeof(a[0][0]);
int row = sizeof(a) / sizeof(a[0]);
int column = lines / row;
cout << sizeof(vector<int>) << endl;
cout << sizeof(a) << endl;
cout <<lines << "
" << row << "
" << column << endl;
}
result
36
9
3
3
32
32
8
1
8
分析结果:
- 这里使用的是vs的debug模式,64位编译器模式。用vector定义的二维数组名a代表数组的首地址,可以看作类型位vector的指针。在64位编译器的release模式下,sizeof(a)=24,包括一个头指针、一个尾指针和一个分配的内存的下一个地址(这里是老师说的,我也不太明白)。在debug模式下可能多了一个padding信息,所以多出八个字节。
- 所以row是1是因为sizeof(a)和sizeof(a[0])都是对vector的大小求值。 另外vector是动态数组,其数据最终是存在堆上,vector对象本身大小固定,被存在栈上
最后
以上就是爱听歌万宝路为你收集整理的vector与array对比的全部内容,希望文章能够帮你解决vector与array对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复