http://blog.163.com/zhoumhan_0351/blog/static/3995422720102251346407/
一、技术原理
vector 容器是一个线性结构,用 3 个指针存放向量的起始字节位置、当前最后一个向量元素的末尾字节和整个容器所占用的内存空间的末尾字节,如图所示,3 个指针变量分别为M_start、M_finish和M_end_of_storage。
二、应用
1、创建
(1)vector(const A& a = A ())
创建一个空的vector对象,A是内存分配器,可省略,相当于一个vector()的调用。
vector<int> v;
(2)vector(size_type n)
创建一个具有n个元素的vector对象,每个vector元素具有它的类型下的默认值。
n个vector元素的内存空间已被分配。如创建了具有10个元素的vector对象v,每个元素默认值为0.0。
vector<double> v(10);
(3)vector(size_type n, const T& value)
创建一个具有n个元素的vector对象,每个元素具有初始值value。如创建了一个具有10个元素的vector对象v,每个元素的初始值为9.3。
vector<double> v(10,9.3);
(4)vector(const vector&)
通过拷贝一个vector对象的各个元素值,创建一个新的vector对象。如使用v1对象创建v2对象,此时,v2对象的5个元素也具有字符值’k’。
vector<char> v1(5,’k’);
vector<char> v2(v1);
(5)vector(const InputIterator first, const InputIterator last, const A& a = A())
InputIterator为输入迭代器,通过拷贝迭代器区间[first,last)的元素值,创建一个新的vector对象中,内存分配器可省略。如用int数组iArray各元素值,创建了vector对象v。
int iArray [] = {11, 13, 19, 23, 27};
vector<int> v(iArray, iArray + 5);
2、初始化
void push_back(const T& value) ;
3、访问
(1)reference operator[](size_type n) //按数组方式访问,如 v[i]
(2)迭代器
iterator begin(
iterator end()
“vector<int>::iteartor i;
返回遍历
reverse_iterator rbegin()
reverse_iterator rend()
4、插入
iterator insert(iterator pos, const T& x) //它在迭代器pos所指的元素前面插入一个元素x。
5、删除
(1)iterator erase(iterator pos)
(2)iterator erase(iterator first, iterator last) //,将[begin(),end())区间的所有vector元素全部清除掉。
6、交换
void swap(vector&)//如swap(v1,v2)把v1和v2交换
7、举例
#include "iostream"
#include "vector"
#include "string"
using namespace std;
class MyAnimal{
public:
MyAnimal(){}
MyAnimal(string _name,int _age){
name=_name;
age=_age;
}
~MyAnimal() {}
string GetName() {return name;}
int GetAge() {return age;}
private:
string name;
int age;
};
int _tmain(int argc, _TCHAR* argv[])
{
MyAnimal *pDog=new MyAnimal("dog",1);
MyAnimal *pMonkey=new MyAnimal("pMonkey",2);
MyAnimal *pChicken=new MyAnimal("chicken",3);
vector<MyAnimal*> v1;
vector<MyAnimal*> v2;
v1.push_back(pDog);
v1.push_back(pMonkey);
v2.push_back(pChicken);
vector<MyAnimal*>::iterator i,iend,i2end;
iend=v1.end();
i2end=v2.end();
for(i=v1.begin();i!=iend;i++)
cout<<(*i)->GetName()
<<" "
<<(*i)->GetAge()
<<" "
<<endl;
for(i=v2.begin();i!=i2end;i++)
cout<<(*i)->GetName()
<<" "
<<(*i)->GetAge()
<<" "
<<endl;
v1.swap(v2);
swap(v1,v2);
iend=v1.end();
i2end=v2.end();
for(i=v1.begin();i!=iend;i++)
cout<<(*i)->GetName()
<<" "
<<(*i)->GetAge()
<<" "
<<endl;
for(i=v2.begin();i!=i2end;i++)
cout<<(*i)->GetName()
<<" "
<<(*i)->GetAge()
<<" "
<<endl;
return 0;
}