1. 程式人生 > >STL 之vector學習 (最詳細的整理)

STL 之vector學習 (最詳細的整理)

vector是一種可以儲存任意型別的動態陣列,屬於序列式容器,可以用sort對其進行排序,底層資料結構是陣列,可以隨機訪問元素。

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    vector<int> a,b;
    int i,j,k,t,n,m;


    //插入vector
    vector<int>::iterator id=a.begin()-1;
    for(i=1;i<11;i++)
    {
        a.push_back(i);
        b.push_back(i);
    }


    //遍歷動態陣列 
    for(i=0;i<10;i++)     //  最普通的遍歷 
    cout<<a[i]<<" ";
    cout<<endl;
    cout<<"用迭代器,begin"<<endl;
    vector<int>::iterator it=a.begin();  //  用迭代器遍歷 
    for(;it!=a.end();it++)   
    cout<<*it<<" ";
    cout<<endl;
    cout<<"用迭代器:rend"<<endl; 
    vector<int>::reverse_iterator iq=a.rend()-1;   //書上說rend相當於begin前一個位置,按書上的說的來敲,iq應該是++,但我一++,他就崩潰,搜了下網上的都是--, 
    for(;iq!=a.rbegin()-1;iq--)  //疑惑,看來不能完全照書敲,實踐出真知。 
    cout<<*iq<<" ";
    cout<<endl;
    cout<<"用迭代器:rbegin"<<endl;
    vector<int>::reverse_iterator ir=a.rbegin(); // 這個倒是和書上說的一樣。 
    for(;ir!=a.rend();ir++)    //
    cout<<*ir<<" ";
    cout<<endl;


    cout<<"a.front:"<<a.front()<<endl; //訪問首元素和尾元素 
    cout<<"a.back:"<<a.back()<<endl;
    cout<<"a[5]:"<<a.at(5)<<endl; // 訪問指定元素 


    //動態陣列的大小 
    cout<<"a.size:"<<a.size()<<endl;
    cout<<"a.max_size:"<<a.max_size()<<endl;
    cout<<"a.capacity:"<<a.capacity()<<endl;  //這個動態陣列所能容納的最大容量 
    a.resize(15);// 改變a的大小 
    cout<<"change the size of a:"<<a.size()<<endl; 


    //動態陣列的交換 
    a.swap(b);
    cout<<"swap a and b"<<endl;
    cout<<"a:";
    for(i=0;i!=a.size();i++)
    cout<<a[i]<<" ";
    cout<<endl;
    cout<<"b:";
    for(i=0;i!=b.size();i++)
    cout<<b[i]<<" ";
    cout<<endl;


    //對動態陣列指定位置進行賦值 
    //a.assign(4,999);  //
    //
    cout<<"a[4]:"<<a[3]<<endl;
    //a.assign(*(a.begin()),8888);//發現一個bug,我如果把此句的前一句放到此句後面,兩個輸出都為8888 
    cout<<"a[0]:"<<*(a.begin())<<endl;//對於bug這個我無法解釋 
    //如圖


    a.reserve(36);  //reserve就是改變記憶體分給a的大小,不試不知道,一試嚇一跳,如果你被改的值大於a的size,可以改變,若小於a的size,則不可以改變。 
    for(i=0;i!=a.size();i++)
    cout<<a[i]<<" ";
    cout<<endl;
    cout<<"a.max_size:"<<a.capacity()<<endl;

如果換為這句,就成了下圖

a.reserve(8); 


    //
    a.erase(a.begin());//
    a.pop_back();//
    a.clear();   //
    cout<<a.size()<<endl;
    return 0;
}

正確的結果: