vector容器用法
作者:
gzcoder
,
2021-09-28 20:11:28
,
所有人可见
,
阅读 174
#include<iostream>
#include<vector>
using namespace std;
void printVector(vector<int> & v)
{
for(int i=0; i < v.size();i++)
cout<<v[i]<<' ';
cout<<endl;
}
void test01()//vector容器构造
{
vector<int> v1;//默认构造 无参构造
for(int i = 0; i < 10; i++)
v1.push_back(i);
printVector(v1);
//通过区间方式进行构造
vector<int> v2(v1.begin(),v1.end());
printVector(v2);
//n个elem方式构造
vector<int> v3(10,100);
printVector(v3);
//拷贝构造
vector<int> v4(v3);
printVector(v4);
}
void test02()//赋值
{
vector<int> v1;
for(int i=0;i<10;i++)
v1.push_back(i);
printVector(v1);
//赋值 operator=
vector<int> v2;
v2=v1;
printVector(v2);
//assign
vector<int> v3;
v3.assign(v1.begin(),v1.end());
printVector(v3);
//n个elem 方式赋值
vector<int> v4;
v4.assign(10,100);
printVector(v4);
}
void test03()//容量和大小
{
vector<int> v1;
for(int i=0;i<10;i++)
v1.push_back(i);
printVector(v1);
if(v1.empty())
cout<<"v1为空"<<endl;
else
{
cout<<"v1不为空"<<endl;
cout<<"v1的容量为"<<v1.capacity()<<endl;
cout<<"v1的大小为"<<v1.size()<<endl;
}
//重新指定大小
v1.resize(15,100);
printVector(v1);
v1.resize(5);
printVector(v1);
}
void test04()//插入和删除
{
vector<int> v1;
for(int i=0;i<10;i++)
v1.push_back(i);//尾插
printVector(v1);
//尾删
v1.pop_back();
printVector(v1);
//插入
v1.insert(v1.begin(),100);
printVector(v1);
v1.insert(v1.begin(),2,200);
printVector(v1);
//删除
v1.erase(v1.begin());
printVector(v1);
v1.erase(v1.begin(),v1.begin()+2);
printVector(v1);
//清空
v1.clear();
printVector(v1);
}
void test05()//数据存取
{
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;
//利用at方式访问元素
for(int i = 0;i < v1.size(); i++)
cout<<v1.at(i)<<' ';
cout<<endl;
//获取第一个元素
cout<<"第一个元素为: "<<v1.front()<<endl;
//获取最后一个元素
cout<<"最后一个元素为: "<<v1.back()<<endl;
}
void test06()//互换容器
{
//1.基本使用
cout<<"交换前: "<<endl;
vector<int> v1;
for(int i=0;i<10;i++)
v1.push_back(i);//尾插
printVector(v1);
vector<int> v2;
for(int i=10;i>0;i--)
v2.push_back(i);//尾插
printVector(v2);
cout<<"交换后: "<<endl;
v1.swap(v2);
printVector(v1);
printVector(v2);
cout<<"-----------"<<endl;
//实际用途
//巧用swap可以收缩空间
vector<int> v;
for(int i=0;i<10000;i++)
v.push_back(i);
cout<<"v的容量为: "<<v.capacity()<<endl;
cout<<"v的大小为: "<<v.size()<<endl;
v.resize(3);
cout<<"v的容量为: "<<v.capacity()<<endl;
cout<<"v的大小为: "<<v.size()<<endl;
//巧用swap收缩内存
vector<int>(v).swap(v);//匿名对象
cout<<"v的容量为: "<<v.capacity()<<endl;
cout<<"v的大小为: "<<v.size()<<endl;
}
void test07()//预留空间
{
vector<int> v;
//利用reserve预留空间
v.reserve(100000);
int num = 0;//统计开辟次数
int * p = NULL;
for(int i=0;i<100000;i++)
{
v.push_back(i);
if(p != &v[0])
{
p = &v[0];
num++;
}
}
cout<<"num = "<<num<<endl;
}
int main()
{
//test01();//构造函数
//test02();//赋值
//test03();//容量和大小
//test04();//插入和删除
//test05();//数据存取
//test06();//互换容器
test07();//预留空间
return 0;
}