Vector总结
一、简介
C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include <vector>
, vector属于std命名域的,因此需要通过命名限定 , 建议使用全局的命名域方式:using namespace std
。
vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。
vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。
二、常用函数
函数 | 功能 |
---|---|
clear() | 移除容器中的所有数据 |
empty() | 判断容器是否为空 |
size() | 返回容器中元素的个数 |
[index]、at(index) | 返回索引为index的元素 |
erase(pos) | 删除pos位置处的数据 |
erase(beg,end) | 删除[bed,end]区间的数据 |
front() | 返回第一个元素 |
insert(pos,elem) | 在pos位置处插入一个元素 |
pop_back() | 删除最后一个元素 |
push_back(elem) | 在容器某尾插入一个元素 |
resize(num) | 重新设置容器的大小 |
begin()、end() | 返回容器首尾元素的迭代器 |
三、常用算法
使用时需要包含头文件:#include<algorithm>
函数 | 功能 |
---|---|
sort(a.begin(),a.end()); | 对a中从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 |
reverse(a.begin(),a.end()) | 对a中从a.begin()(包括它)到a.end()(不包括它)的元素进行倒置 |
copy(a.begin(),a.end(),b.begin()+1) | 把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素 |
find(a.begin(),a.end(),10) | 在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置 |
四、使用示例
1、初始化
vector<int> a ; //声明一个int型向量a
vector<int> a(10) ; //声明一个初始大小为10的向量
vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ; //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
2、vector()的遍历
方法一:使用数组下标
for(int i=0;i<vec.size();i++)
cout<<vec[i];
方法二:使用迭代器
vector<int>::iteator itr = vec.begin();
for(;itr != vec.end();itr++)
cout<< *itr;
3、vector()二维数组
vector<vector<int> > vec; //定义vector二维数组
for(int i=0;i<vec.size();i++) //遍历vector二维数组
for(int j=0;j<vec[i].size();j++)
cout<<vec[i][j];