STL系列之vector(容器)
介绍
- vector中文名容器,是C++标准模板库中的内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
- vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。这意味着可以使用常规指针偏移的方式访问元素,使用数组形式访问一样有效。但与数组不同的是,它们的大小可以动态变化,并通过容器自动处理它们的存储。
- 简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
头文件
使用vector,必须包含头文件:
#include<vector>
- 创建vector对象
vector <int> v;//
vector <int> v(3,1); //初始化放入3个1
vector <int*> vPointer;
vector <ST_USER_DEFINE*> vPointer;//ST_TEST可以是用户定义的任意结构体或类等数据类型
- 给vector对象赋值
调用尾部插入push_back,push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。
int *ponit = new int;
for(int i = 0;i<10;i++)
{
*ponit = i;
v.push_back(point);
}
- 使用下标访问元素,
cout<<v.at(1)<<endl;//推荐
cout<<v[0]<<endl;
记住下标是从0开始的,另外at()进行了边界检查,应该尽量使用at().
- 遍历vector对象中的元素
需要定义迭代器变量vector::iterator it,
for (vector<int>::iterator it = v.begin();it != v.end();it++)
{
cout<<*it<<" ";
}
- 查找vector中的元素
//查找
it = find(v.begin(),v.end(),7);
cout<<*it;
- 插入
it = v.begin() + (v.end()-v.begin())/2;
v.insert(it,2,25);
- 转置(即逆序)
reverse(v.begin(),v.end());
//排序等需要包含算法头文件
#include <algorithm>
- 排序,按元素的value进行排序
sort(v.begin(),v.end());
- 删除元素
vector提供了erase(),pop_back(),clear()来删除元素
v.erase(it+1,it+4);//删除[beg,end)区间的数据,传回下一个数据的位置。
v.clear();//移除容器中所有元素
v.pop_back();//删除最后一个元素
- 备注
以上仅列举了vector最常调用的方法示例。需要学习的同学可以参考[http://www.cplusplus.com/reference/vector/vector/]进行学习。