vector向量容器

来源:互联网 发布:游戏多开软件 编辑:程序博客网 时间:2024/05/20 04:11

vector容器是数组的一个泛化推广,不仅可以像数组那样进行元素的随机访问,还可以在容器的尾端插入新元素,实现了Random Access Container和Back Insertion Sequence概念。vector具有自动的内存管理功能,对于元素的插入和删除,能够动态调整占用的内存空间。

创建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初始化

利用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;}

vector的交换

利用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用于删除末尾的一个元素

1 0
原创粉丝点击