vector数据结构与数组非常类似,也称单端数组
与数组的不同:
数组是静态空间,vector可以动态扩展
vector的迭代器是支持随机访问的迭代器
vector构造函数
创建vector容器
函数原型:
vector<T>v; //采用模板实现类实现
vector(v.begin(),v.end());//将v[begin(),end()]区间中的元素拷贝给本事
vector(n,elem); //构造函数将n个elem拷贝给本身
vector(const vector& vec) //拷贝构造函数
void print(vector<int>&v)
{
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
int main()
{
vector<int>v1; //默认构造
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
print(v1);
//通过区间方式构造
vector<int>v2(v1.begin(),v1.end());
print(v2);
//拷贝构造
vector<int>v3(v1);
print(v3);
}
默认构造或者拷贝构造平时足够
vector赋值操作
函数原型:
vector& operator=(const vector& vec);
assign(beg,end); //将[beg,end]区间中的数据拷贝赋值给本身
assign(n,elem); //将n个elem拷贝赋值给本身
vector<int>v1;
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
vector<int>v2=v1;
print(v2);
vector<int>v3;
v3.assign(v1.begin(),v1.end());
print(v3);
vector<int>v4;
v4.assign(10,100);
print(v4);
vector容量和大小
对vector容器的容量和大小操作
函数原型:
empty() //判断容器是否为空
capacity() //容器的容量
size() //返回容器中元素的个数
resize(int num) //重新指定容器的长度为num,若容器变长,则以默认值填充新位置,若变短,则删除超出部分
resize(int num,elem) //重新指定容器的长度为num,若容器变长,则以elem填充新位置,若变短,则删除超出部分
vector<int>v1;
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
if(v1.empty()) //为真,代表容器为空
{
cout<<"v1 is empty"<<endl;
}
else{
cout<<"v1 is not empty"<<endl;
cout<<"v1 's capacity:"<<v1.capacity()<<endl;
cout<<"v1 's size is:"<<v1.size()<<endl;
}
//resize
v1.resize(15);
print(v1);
v1.resize(17,100);
print(v1);
vector插入和删除
push_back(ele) //尾部插入元素ele
pop_back(); //删除最后一个元素
insert(const_iterator pos,ele); //迭代器指向位置pos插入元素ele
insert(const_iterator pos,int count,ele) //迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); //删除迭代器指向的元素
erase(const_iterator start,const_iterator end); 删除迭代器从start到end之间的元素
clear(); //删除容器中所有元素
vector<int>v1;
//尾插
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
v1.pop_back();
print(v1);
//插入 第一个参数是迭代器
v1.insert(v1.begin(),100);
print(v1);
v1.insert(v1.begin(),2,1000);
print(v1);
//删除,也要提供迭代器
v1.erase(v1.begin());
print(v1);
v1.clear();
print(v1);
vector数据存取
函数原型:
at(int idx); //返回索引idx所指的数据
operator[];
front(); //返回容器中第一个数据元素
back(); //返回容器中最后一个元素
vector<int>v1;
//尾插
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
for(int i=0;i<v1.size();i++)
{
cout<<v1[i]<<" ";
}
cout<<endl;
for(int i=0;i<v1.size();i++)
{
cout<<v1.at(i)<<" ";
}
cout<<endl;
//获取第一个元素
cout<<"the first elem:"<<v1.front()<<endl;
//get the last elem;
cout<<"the last elem is:"<<v1.back()<<endl;
vector互换容器
实现两个容器内元素进行互换
swap(vec); //将vec与本身的元素互换
vector<int>v1;
//尾插
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
vector<int>v2;
for(int i=10;i>0;i--)
{
v2.push_back(i);
}
v2.swap(v1);
print(v2);
print(v1);
//利用swap收缩内存
vector<int>v1;
for(int i=0;i<100000;i++)
{
v1.push_back(i);
}
cout<<"v1的容量为:"<<v1.capacity()<<endl;
cout<<"v1的size为:"<<v1.size()<<endl;
v1.resize(3);
cout<<"v1的容量为:"<<v1.capacity()<<endl;
cout<<"v1的size为:"<<v1.size()<<endl;
vector<int>(v1).swap(v1); //(v1)匿名对象
cout<<"v1的容量为:"<<v1.capacity()<<endl;
cout<<"v1的size为:"<<v1.size()<<endl;
vector预留空间
减少vector在动态扩展容量是的扩展次数
函数原型:
reserve(int len); //容器预留len个元素长度,预留位置不初始化,元素不可访问