码迷,mamicode.com
首页 > 其他好文 > 详细

vector向量容器

时间:2015-08-12 11:40:31      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:stl   c++   vector   容器   

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

vector向量容器

标签:stl   c++   vector   容器   

原文地址:http://blog.csdn.net/u011000290/article/details/47440713

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!