向量:向量支持随机读取和更改 查找一般 末端删除快 随机删除慢,它是 “class”. 可作为顺序容器,类似数组,但大小可动态变化。与数组比较,它浪费存储空间,用起来麻烦
链表:只有头结点有名字,不支持随机读取和更改 查找慢 元素较多时删除时间大约是查找时间,适用于插入或删除频繁,存储空间需求不定的情况,存储空间不连续,动态分配内存;
数组:,数组是“变量,大小不可改变,数组无法动态定做,或者要做额外的善后工作,数组无法整体复制,向量可以,数组无法扩容。存储效果高,存取数度快;
vector(向量)是c++STL(标准模板类库)的重要一员,使用时,要包含头文件vector即可。
|
int a[10] = {0}; int b[10] = a; //错
vector<int> c(10); vector<int> d = c; //正确
|
除此之外,向量还有好多种定义方式,还可以从数组中获得初值,例如
|
int a[3] = {1, 2, 3}; vector<int> va(a, a+3);
|
|
int n; cin>>n; int a[n]; //不正确,数组大小不确定
|
若采用动态定做,从而需要释放空间
|
int n; cin>>n; int* ap = new int[n]; // 一系列数据处理 delete[] ap;
|
如果换成向量,则一目了然
|
int n; cin>>n; vector<int> va(n);
|
|
vectot<int> va;
//无法想象对应的数组操作 for (int a; cin>>a; va.push_bach(a));
|
向量还有好多常用的操作,这些操作是数组所不具备,但同时向量又可以像数组一样被使用,例如:
|
vector<int> a; a.push_bach(5); //在a向量最后位置插入一个元素 a.pop_back(); //删除a向量的最后一个元素 a.clear(); //清空a向量中的元素 int x = a.front(); //将a向量的第一个元素赋给x int y = a.back(); //将a向量的最后一个元素赋给y bool b = a.empty(); //判断是否为空 a.resize(10); //将元素个数调至10个,多则删,少则补
//等等
|
其中a.begin(),b.end()分别表示向量a的起始元素位置和最后一个元素之外的元素位置.
输出向量中的元素可以如下:
|
for (int i = 0; i < a.size(); ++i) cout<<a[]<<" ";
|
还有一个比较有用的是对向量中的元素进行排序:
|
sort(a.begin(), a.end()); //从小到大排序
|