STL常用容器用法之——vector
2017-08-23 20:48
477 查看
Vector容器
vector是将元素置于一个动态数组中加以管理的容器。vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时。
1、定义一个vector容器
vector采用模板类实现,vector对象的默认构造形式vector<T> vecT;
vector<int> vecInt; //一个存放int的vector容器。
Class CA{};
vector<CA*> vecpCA; //用于存放CA对象的指针的vector容器。
vector<CA> vecCA; //用于存放CA对象的vector容器。由于容器元素的存放是按值复制的方式进行的,所以此时CA必须提供CA的拷贝构造函数,以保证CA对象间拷贝正常。
2、vector添加删除
vector<int> vecInt;vecInt.size(); //容器的大小,默认为0
vecInt.push_back(1); //在容器尾部加入一个元素
vecInt.push_back(3);
vecInt.push_back(5);
int iF = vecInt.front(); //获取头部元素1
int iB = vecInt.back(); //获取尾部元素5
vecInt.front() = 11; //设置头部元素11 {11 3 5}
vecInt.back() = 55; //设置尾部元素55 {11 3 55}
vecInt.pop_back(); //删除尾部元素
3、vector的初始化
int iArray[] = {0,1,2,3,4};vector<int> vecIntA( iArray, iArray+5 );
vector<int> vecIntB ( vecIntA.begin() , vecIntA.end() ); //用构造函数初始化容器vecIntB
vector<int> vecIntB ( vecIntA.begin() , vecIntA.begin()+3 );
vector<int> vecIntC(3,9); //此代码运行后,容器vecIntB就存放3个元素,每个元素的值是9。
4、vector的遍历
1)通过数组的方式vector<int> v1(10); //提前把内存准备好 每个元素初始化为0
for (int i=0; i<10; i++)
{
v1[i] = i + 1;
}
for (int i=0; i<10; i++)
{
printf("%d ", v1[i]);
}
2)通过迭代器
//正向遍历
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it ++ )
{
cout << *it << " ";
}
//逆序遍历
for (vector<int>::reverse_iterator rit = v1.rbegin(); rit!=v1.rend(); rit++ )
{
cout << *rit << " ";
}
5、vector的删除操作
//区间删除v1.erase(v1.begin(), v1.begin()+3);
//根据元素的位置 指定位置删除
v1.erase(v1.begin()); //在头部删除一个元素 输入:迭代器
//根据元素的值
v1[1] = 2;
v1[3] = 2;
printV(v1);
for (vector<int>::iterator it =v1.begin(); it != v1.end();)
{
if (*it == 2)
{
it = v1.erase(it); //当 删除迭代器所指向的元素的时候,erase删除函数会返回迭代器it的下一个位置
}
else
{
it ++;
}
}
//删除vecInt的所有元素
vecInt.clear(); //容器为空
6、vector的插入
vector.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值
例:
vecA {1 3 5 7 9}
vecB{2 4 6 8}
vecA.insert(vecA.begin(),11); //{11, 1, 3, 5, 7, 9}
vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}
vecA.insert(vecA.begin(), vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}
相关文章推荐
- C++STL中vector容器的用法
- STL中的常用的vector,map,set,sort, list用法笔记(转)
- STL中的常用的vector,map,set,Sort用法
- STL常用容器简介 vector deque list map set
- STL中的常用的vector,map,set,Sort用法
- C++学习 STL之二:vector容器用法详解
- [C++]STL中vector容器 begin()与end()函数、front()与back()的用法
- STL中的常用的vector,map,set,sort, list用法笔记(转)
- STL常用容器用法之——stack
- STL中的常用的vector,map,set,Sort用法
- C++STL中vector容器 begin()与end()函数、front()与back()的用法
- [转]STL中的常用的vector,map,set,Sort用法
- C++ 动态数组类模板(向量容器)vector与STL用法总结
- STL常用容器用法之——queue和priority_queue
- STL中的常用的vector,map,set,Sort用法
- stl容器set,map,vector之erase用法与返回值详细解析
- STL-vector容器用法
- 常用stl 容器用法
- STL常用容器用法整理
- MFC中STL容器中Vector,List,Map基本用法汇总