首页 > 代码库 > STL之vector

STL之vector

1.添加 vector 头文件.

1:  #include <iostream>
2:  #include <vector>
3:  
4:  using namespace std;
<style type="text/css"> .codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}</style>

2.构造函数

//默认构造函数v1
    vector<int> v1; //默认构造函数v1
    v1.push_back(1);//在容器的最后添加一个值为t的数据,容器的size变大
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);

    //将一个容器初始化为另一个容器的副本
    vector<int> v2(v1);//或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。

    vector<int> v3(5,8);//v3包含5个值为8的元素 //只适合抗美顺序容器

    vector<int> v4(10); //v4含有值初始化的10个元素 //只适合抗美顺序容器

3.vector操作

//vector操作
    //assign 函数
    v4.assign(v1.begin(),v1.end());
    v1.assign(2,4);  //v1包含2个4.
    
    //at(int idx)    //传回索引idx所指的数据,如果idx越界,抛出out_of_range.
    int iTemp = v4.at(0); 
    
    //back()  //传回最后一个数据,不检查这个数据是否存在。
    int iBack = v4.back();
    //begin()  //解决一个随机访问迭代器第一个元素
    vector<int>::iterator it = v4.begin();
    
    //capacity() //返回容器中数据个数。
    int iCap = v4.capacity();
    //clear()    //移除容器中所有数据。
    v1.clear();
    //empty()    //判断容器是否为空。
    if (v4.empty())
    {
        cout << "v4 is empty!";
    }
    //end()         //指向迭代器中的最后一个数据地址。
    it = v4.end();
    //erase(pos)    //删除pos位置的数据,传回下一个数据的位置。pos beg end 是迭代器.
    //erase(beg,end)//删除[beg,end)区间的数据,传回下一个数据的位置。
    v4.erase(v4.begin()+2);  //1 3 7
    v4.erase(v4.begin()+1,v4.end()); //1
    
    //insert() 插值操作
    /*
    insert(pos,elem)    //在pos位置插入一个elem拷贝,传回新数据位置。
    insert(pos,n,elem)  //在pos位置插入n个elem数据。无返回值。
    insert(pos,beg,end) //在pos位置插入在[beg,end)区间的数据。无返回值。*/
    v4.insert(v4.begin()+1,3);  //1 3
    v4.insert(v4.begin()+2,2,5);//1 3 5 5
    v4.insert(v4.begin()+3,v3.begin()+2,v3.begin()+4); // 1 3 5 8 8 5

    //front() 返回第一个值
    int iFront = v4.front();
    
    //get_allocator 使用构造函数返回一个拷贝. 返回vector的内存分配器 
    vector<int>v5( v4.begin()+1, v4.begin()+3, v4.get_allocator( ));//把V4的内存分配器作为一个参数参与构造V5。这样,它们两个用一个内存分配器了 // 3 5
    
    //max_size()返回容器中能够放入(最大)数据的数量。在应用中没什么意义.
    int imaxSize = v5.max_size();  //4G内存是4*1024*1024*1024=1073741823个字节
    
    //pop_back() 删除最后一个数据。
    //push_back(elem) 在尾部加入一个数据。
    v4.pop_back();
    v4.push_back(5);

    //rbegin()传回一个逆向队列的第一个数据的位置
    //rend()传回一个逆向队列的最后一个数据的下一个位置。
    vector<int>::iterator it_beg = v4.begin();
    for (;it_beg != v4.end();it_beg++)
    {
        cout << *it_beg << " "; //正向输出每个数据.
    }
    cout <<  endl;
    
    vector<int>::reverse_iterator ir_beg = v4.rbegin();
    for (;ir_beg != v4.rend();ir_beg++)
    {
        cout << *ir_beg << " ";//逆向输出每个数据.
    }
    cout <<  endl;

    //resize(num)重新指定队列的长度。
    v4.resize(5);//保留前五位数据.

    //reserve()保留适当的容量。
    v4.reserve(6);
    //size()
    int iSize = v4.size();
    
    //元素互换 
    v4.push_back(9);
    v4.swap(v3);
    swap(v4,v3);