vector 向量容器

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;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值