vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念。vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间。
有多种方式
(1) vector(constA&a=A())
创建一个空的vector对象,A是内存分配器,此参数可以省略,相当于一个vector()的调用,如:
vector<int> v;
(2) vector(size_type n)
创建一个具有n个元素的vector对象,每个vector元素具有对应类型下的默认值,且n个vector元素的内存空间已被分配,如:
vector<double> v(10);//每个元素的默认值为0.0
(3) vector(size_type n,const T&value)
创建一个具有n个元素的vector对象,每个元素具有初始值valuevector v(10,9.9); vector(const vector&)
通过拷贝一个vector对象的各个元素值,创建一个新的vector对象。如:
vector<char> v1(10,’c’);
vector<char> v2(v1)
(5) vector(const InputIterator first, const InputIterator last,const A&a=A())
InputIterator为输入迭代器,通过拷贝迭代区间[first,last),如:
int iArray[]={1,3,5,7,9};
vector<int> v(iArray,iArray+5);
利用vector提供的push_back函数进行vector容器的初始化。如:
vector<int> v;
v.push_back(10);
vector的元素可以通过数组或者迭代器的方式进行遍历访问。
利用数组方式访问vector元素:
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
for(int i=0;i<v.size();i++)
{
cout<<"v["<<i<<"]="<<v[i]<<endl;
}
return 0;
}
vector提供了begin()和end()函数,用于获取首元素的迭代器和最后一个元素的下一位置的迭代器,通过迭代器访问vector元素:
#include<vector>
#include<iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector<int>::iterator begin,end;
end=v.end();
int j;
for(begin=v.begin(),j=0;begin!=end;begin++,j++)
{
cout<<"v["<<j<<"]="<<*begin<<endl;
}
return 0;
}
push_back()在vector容器的尾部添加元素,insert函数可以在任意位置插入元素。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.insert(v.begin()+3,5);//在4的前面插入3
v.insert(v.begin(),6);//插入6为首元素
v.insert(v.end(),7); //插入7为末尾元素
for(int i=0;i<v.size();i++)
{
cout<<"v["<<i<<"]="<<v[i]<<endl;
}
return 0;
}
erase函数用来删除迭代器pos所指的元素或者迭代器区间[first,last)的所有元素,原型如下:
iterator erase(iterator pos);
iterator erase(iterator first,iterator last);
例子:
#include<iostream>
#include<vector>
using namespace std;
class MyAnimal
{
public:
char *name;
int age;
MyAnimal(char *name,int age)
{
this->name=name;
this->age=age;
}
~MyAnimal(){}
};
int main()
{
MyAnimal *pDog=new MyAnimal("dog",1);
MyAnimal *pMonkey=new MyAnimal("monkey",2);
MyAnimal *pCat=new MyAnimal("cat",3);
MyAnimal *pSnake=new MyAnimal("snake",4);
vector<MyAnimal *> v;//v存放各个对象的地址
v.push_back(pDog);
v.push_back(pMonkey);
v.push_back(pCat);
v.push_back(pSnake);
delete pMonkey;//物理删除pMonkey所指的对象
v.erase(v.beigin()+1);//删除第2个元素
vector<MyAnimal *>::iterator begin,end;
end=v.end();
for(begin=v.begin();begin!=end;begin++)
{
cout<<(*begin)->name<<" "<<(*begin)->age<<endl;
}
v.clear();
cout<<"执行clear,vector元素全部被清除"
return 0;
}
利用vector的反向迭代器reverse_itrator以及相应的rbegin和rend函数可以反向遍历vector容器的元素。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector<int>::reverse_iterator rbegin,rend;
rend=v.rend();
for(rbegin=v.rbegin();rbegin!=rend;rbegin++)
{
cout<<*rbegin<<endl;
}
return 0;
}
利用swap算法,实现两个vector容器元素的交换,其原型如下:
void swap(vector &)
例:
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>& v)
{
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
cout<<endl;
}
int main()
{
//v1
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
cout<<"-------v1与v2交换前"<<endl;
cout<<"v1=";
print(v1);
//v2
vector<int> v2;
v2.push_back(3);
v2.push_back(4);
v2.push_back(5);
v2.push_back(6);
cout<<"v2=";
print(v2);
//v1与v2交换
swap(v1,v2);
cout<<"-------v1与v2交换后"<<endl;
cout<<"v1=";
print(v1);
cout<<"v2=";
print(v2);
return 0;
}
bool empty()
判断是否为空
size_type size()
实际元素个数
size_type max_size()
系统所允许的vector容器的最大元素个数
size_type capacity()
当前可以容纳的vector元素的个数,reserve函数可以调整数据空间大小
reference front()
容器首元素的引用
reference back()
容器的末尾元素的引用
void pop_back()
与push_back相反,pop_back用于删除末尾的一个元素
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u011000290/article/details/47440713