文章目录
- 一、Vector容器简介
- 二、基本操作
- 三、代码实现
- 1. 构造函数
- 2. 赋值
- 3. 插入和删除
- 4. 容量和大小
- 5. 数据存取
- 6. 预留空间
- 7. 互换容器
一、Vector容器简介
vector是 C++ 标准模板库 中的部分内容,中文偶尔译作“容器”,但并不准确。 它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的 动态数组 ,能够增加和压缩数据。
容器特性
-
顺序序列
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
-
动态数组
支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加/删除元素的操作。
-
能够感知内存分配器的(Allocator-aware)
容器使用一个内存分配器对象来动态地处理它的存储需求。
二、基本操作
- 构造函数
- 赋值
- 插入和删除
- 容量和大小
- 数据存取
- 预留空间
- 互换容器
三、代码实现
1. 构造函数
void printVector(vector<int> &p)
{
for(vector<int>::iterator it=p.begin();it!=p.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
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);
vector<int> v3(10,100);
printVector(v3);
vector<int> v4(v3);
printVector(v4);
}
2. 赋值
void printVector(vector<int> &p)
{
for(vector<int>::iterator it=p.begin();it!=p.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
vector<int> v1;
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
vector<int> v2;
v2=v1;
printVector(v2);
vector<int> v3;
v3.assign(v1.begin(),v1.end());
printVector(v3);
vector<int> v4;
v4.assign(10,100);
printVector(v4);
}
3. 插入和删除
void printVector(vector<int> &p)
{
for(vector<int>::iterator it=p.begin();it!=p.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
vector<int> v1;
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(50);
printVector(v1);
v1.pop_back();
printVector(v1);
v1.insert(v1.begin(),100);
printVector(v1);
v1.insert(v1.begin(),2,1000);
printVector(v1);
v1.erase(v1.begin());
printVector(v1);
v1.clear();
printVector(v1);
}
4. 容量和大小
void printVector(vector<int> &p)
{
for(vector<int>::iterator it=p.begin();it!=p.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
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);
}
5. 数据存取
void test01()
{
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<<"第一个元素为:"<<v1.front()<<endl;
cout<<"最后一个元素为:"<<v1.back()<<endl;
}
6. 预留空间
void test01()
{
vector<int> v;
v.reserve(10000);
int num=0;
int *p=NULL;
for(int i=0;i<10000;i++)
{
v.push_back(i);
if(p!=&v[0])
{
p=&v[0];
num++;
}
}
cout<<"num = "<<num<<endl;
}
7. 互换容器
void printVector(vector<int> &p)
{
for(vector<int>::iterator it=p.begin();it!=p.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void test01()
{
cout<<"交换前:"<<endl;
vector<int> v1;
for(int i=0;i<10;i++)
{
v1.push_back(i);
}
printVector(v1);
vector<int> v2;
for(int i=9;i>=0;i--)
{
v2.push_back(i);
}
printVector(v2);
cout<<"交换后:"<<endl;
v1.swap(v2);
printVector(v1);
printVector(v2);
}
void test02()
{
vector<int> v;
for(int i=0;i<10000;i++)
{
v.push_back(i);
}
cout<<"最初时:"<<endl;
cout<<"v的容量为:"<<v.capacity()<<endl;
cout<<"v的大小为:"<<v.size()<<endl;
cout<<endl<<"重新指定大小后:"<<endl;
v.resize(3);
cout<<"v的容量为:"<<v.capacity()<<endl;
cout<<"v的大小为:"<<v.size()<<endl;
cout<<endl<<"创建匿名对象进行交换后:"<<endl;
vector<int>(v).swap(v);
cout<<"v的容量为:"<<v.capacity()<<endl;
cout<<"v的大小为:"<<v.size()<<endl;
}