vector是使用频率非常高的一个容器,经过一段时间的学习,是时候做个小结了。贴一些好用的链接和帖子:
1.比较简明的英文介绍:std::vector
2.中文帖子:vector的成员函数解析
3.适合后续深入了解: C++存储数据结构之三vector
基本用法
1.头文件及声明
#include<vector>
using std::vector;
2.创建vector对象
vector<int> vec;//默认构造
vector<int> vec1(vec);//复制构造
vector<int> vec2(n,I);//vec2初始化为n个元素I
vector<int> vec3(n);//vec3初始化为n个int类型的缺省值
3.尾部插入元素 vec.push_back(a);
4.使用下标访问元素 cout << vec[0] <<endl;
5.使用迭代器访问元素
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++) {
cout<<*it<<endl;
}
6.插入元素:vec.insert(vec.begin()+i,a);//在第i+1个元素前面插入a
7.删除元素:vec.erase(vec.begin()+2); //删除第3个元素
8.返回容器大小:cout << vec.size() <<endl;
9.重新定义容器大小:vec.resize(n);
10.清空容器:vec.clear();
相关算法
1.使用reverse
将元素翻转:头文件#include<algorithm>
;声明using std::reverse;
.
reverse(vec.begin(),vec.end());
//将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)
2.使用sort
排序:头文件#include<algorithm>
;声明using std::sort;
.
sort(vec.begin(),vec.end());
//默认升序排列
第三个参数可以用lambada表达式选择升降序:
sort(
vec.begin(),
vec.end(),
[](int x, int y){ return x >= y; }//降序排列
);
应用:动态的二维数组
- 行定长,列动态
vector<vector<int> > vec(10);
//vec初始化为10个vector<int>类型缺省值,每一个都是一个空的动态数组.
for(int i=0;i<5;i++) {
vec[5].push_back(i);
}
- 行,列都动态
- 用户输入行数
cin >> n;
vector<vector<int> > vec(n);
- 用户不输入行数
例如要求用户录入各班级的学生的学号和成绩,但用户并不知道有多少个班,只是想录完一定数量的班级后,自己结束输入(比如输入-1)。
//假设已有Student类
vector<vector<Student> > Class;
int classID = 1;
int n;
while(1) {
//输入班级学生人数
cin >> n;
if(n == -1)break;
Class.resize(classID);
//输入所有学生的信息
Student input;
for(int i=0;i<n;i++) {
cin >> input.ID >> input.score;
Class[classID].push_back(input);
}
//准备输入下一个班级
classID++;
}
输入例子:
3 1237 90 1238 70 1239 60 2 1367 78 1368 92 -1
以上,只要用户不输入-1自行结束,行就会自增,是不是很酷呢?_
网友评论