目录
一维数组
声明
vector<int> a; //无参数 构造一个空的vector,
vector<int> a(10); //定义了10个整型元素的向量,圆括号内为元素个数,但没有给出初值,其值是不确定的。
vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
vector<int> a(b); //用b向量来创建a向量,整体复制性赋值, 拷贝构造
vector(begin,end); //复制[begin,end)区间内另一个数组的元素到vector中
vector<int> v3=a ; //移动构造
vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
vector<int> a(b,b+6); //从数组中获得初值,b[0]~b[5]
访问
a.begin(); // 返回指向容器第一个元素的迭代器
a.begin()+i //返回a[i]
a.end(); // 返回向量尾指针,指向向量最后一个元素的下一个位置
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
//迭代器用法
vector<int>::iterator it;
for(it=a.begin();it!=a.end();it++){
cout<<*it<<" ";
}
//条件删除
for (it = a.begin(); it != it.end(); )
{
if (*it>2)//删除大于2的元素
{
a.erase(it);
}
else
{
it++;
}
// auto遍历
for (auto x: vecint) {
cout << x << " ";
}
1.通过下标访问
和访问普通的数组是一样的
2.通过迭代器访问
迭代器可以理解为一种类似指针的东西
vector::iterator it;定义迭代器,得到了迭代器it之后,可以通过*it来访问vector中的元素
3.v[i]和*(v.begin()+i)是等价的
4.迭代器来实现了两种自加操作和自减操作
5.在常用STL容器中,只有在vector和string中,才允许使用v.begin()+3这种迭代器加上整数的写法
插入
a.push_back(x) //在vector后面添加一个元素x
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
insert(it,x) //用来向vector的任意迭代器it处插入一个元素x
a.insert(a.begin()+1,5); //在a的第1个元素后插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4
a.insert(a.begin()+1,3,5);//在a的第1个元素后插入3个数,其值都为5
a.insert(a.begin()+1,b+3,b+6);//b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8
a.swap(b); //将b中数据全部移到a中,此时b中为空了
删除
a.pop_back(); //删除a向量的最后一个元素
a.clear(); //清空a中的元素
a.erase(a.begin(),a.end());//清空a中的元素
a.erase(a.begin()+i,a.end()+j);删除区间[i,j-1];区间从0开始
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
容量
a.size(); //返回a中元素的个数;
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.rezize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机
a.rezize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为2
a.reserve(100); //将a的容量(capacity)扩充至100
find(a.begin(),a.end(),20); //三个参数,分别是查找位置的头地址,以及尾地址和要查找的元素。返回值是第一次出现该元素的地址
reverse(vec.begin(),vec.end()); //将元素翻转,即逆序排列!
sort(vec.begin(),vec.end()); //(默认是按升序排列,即从小到大)
sort(a,a+len(a),cmp);//将数组a按照cmp函数指定的规则排列,例如如下的为降序规则
bool cmp(int para1,int para2)
{
return a>b;
}
二维数组
声明二维数组
vector<vector<int> > A;//正确的定义方式
vector<vector<int>> A;//c++11之前这样定义是错误的,c++11之后支持这种定义
长度
len = A.size(); //vector<vector<int> >A中的vector元素的个数
len = A[i].size(); //vector<vector<int> >A中第i个vector元素的长度
参考链接: