vector属于顺序容器,所谓顺序容器,就是元素的顺序与元素的值无关,与元素加入容器的位置相对应。
对于vector可以将其理解为可变大小数组,支持快速随机访问,在尾部之外的位置插入删除可能会比较慢。了解完概念接下来就开始学习它的用法
假设以下代码前面都包含vector头文件,并包含using namespace std;
1.创建vector对象
vector<int> vec;
此种定义下vec容器为空,其中尖括号中是容器中保存的类型
vector<int> vec(10,5);
此种定义下vec中保存了10个5
(3)
int a[5];
vector<int> vec(begin(a),end(a));
此种定义下vec保存了数组a中的所有元素
vector的定义方法有很多,这里就只列一些常见的
2.vector中元素的访问
(1)通过迭代器访问
vector<int> vec;
vector<int>::iterator it;
for(it = vec.begin();it != vec.end();it++)
{
cout<<*it;
}
(2)通过下标访问
vector<int> vec(3,5);
for(int i=0;i<3;i++)
{
cout<<vec[i];
}
3.vector类型的基本操作
(1)尾部添加数据
vec.push_back(a);
具体实例如下
#include<iostream>
#include<vector>
using namespace std;
int main(int argc,char **argv)
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
for(auto x:vec)
{
cout<<x<<" ";
}
cout<<endl;
return 0;
}
(2)在任意位置插入数据
//在第i+1个数据前插入a
vec.insert(vec.begin()+i,a);
实例如下
#include<iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int>v(3);
v[0] = 1;
v[1] = 3;
v[2] = 4;
v.insert(v.begin(),0);
v.insert(v.begin()+2,2);
v.insert(v.end(),5);
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
(3)删除元素
删除第i+1个元素
vec.erase(vec.begin()+i);
实例如下
#include<iostream>
#include<vector>
using namespace std;
int main(int argc,char **argv)
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
//删除第二个元素
vec.erase(vec.begin()+1);
for(auto x:vec)
{
cout<<x<<" ";
}
cout<<endl;
return 0;
}
(4)vector的大小
//返回vector中已有的元素个数
vec.size();
//返回vector中可保存的最大元素个数
vec.max_size();
//判断vector是否为空
vec.empty()
实例如下
#include<iostream>
#include<vector>
using namespace std;
int main(int argc,char **argv)
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
//获得vec的已有元素的个数
cout<<"已有元素:"<<vec.size()<<endl;
//获得vec中可以保存的最大元素个数
cout<<"最大保存元素个数:"<<vec.max_size()<<endl;
//判断vec是否为空
if(vec.empty())
{
cout<<"vec为空"<<endl;
}
else
{
cout<<"vec不为空"<<endl;
}
return 0;
}
4.迭代器失效问题
由于向vector中添加元素或删除元素,可能会使迭代器失效,所以必须保证每次改变容器的操作之后都能正确的重新定位迭代器
5.vector对象是如何增长的
当我们向vector中添加新元素时,若此时系统给vector的内存已被占完,则系统或为vector重新分分配一块内存该内存会比他新的内存需求更大,这样就可以保证当再有新的元素添加进来时,就不会总是要重新分配新的内存了。