STL 容器和迭代器連載4_順序容器的操做1

/*- ==========================================================
*     文件名  :STL_con_ite_4.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-05-23
*     修改時間:2012-05-23
*     功能說明:STL 容器和迭代器連載4_順序容器的操做1
*     版權說明:版權全部 袁培榮 YuanPeirong 
*     編譯環境:Windows 7(x64) SP1 簡體中文專業版
*     編譯器:  Visual Studio 2010 SP1(中文旗艦版)
                MinGW 20120426 GNU GCC 4.6.2
                Visual C++ 6.0 SP6(中文企業版)
- ==========================================================*/

#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string>

using std::cout;
using std::endl;
using std::vector;
using std::list;
using std::deque;
using std::string;

int main(int argc, char* argv[])
{
    //在講順序容器的操做前,補充一個知識點:
    //那就是容器的容器的定義:
    vector<vector<int> > con1;
    vector<list<string> > con2;
    list<list<int> > con3;
    list<vector<string> > con4;
    vector<list<deque<int> > > con5;
    //相信你也已經看明白了,無非就是一種嵌套,惟一要注意的是:
    //兩個">"符號之間必定要有空格,否則編譯器會誤認爲">>"。
    
    //通常,容器都爲本身定義了一些數據類型,如:
    // (在STL vector 介紹連載1-2-3中使用過一些)
    // size_type 無符號的整型,用來存儲此容器類型的最大可能容器長度
    // iterator  容器的迭代器類型
    // ……其餘不一一介紹
    
    //下面來介紹第一組操做,也是咱們前面用過的
    // begin() 返回一個迭代器,指向容器的第一個元素
    // end() 返回一個迭代器,指向容器的最後一個元素的下一位置
    // 以上兩個的返回類型是iterator或者const_iterator
    // rbegin() 返回一個逆序迭代器,指向容器的最後一個元素
    // rend() 返回一個逆序迭代器,指向容器的第一個元素的前一個位置
    // 以上兩個的返回類型是reverse_iterator或者const_reverse_iterator
    //下面是一個示例:
    vector<int> v1(10,0); //建立一個容器,有10元素,每一個都初始化爲0
    cout<<"爲便於區分每一個元素,下面重設每一個元素的值"<<endl;
    for(int i=0; i!=10; i++)
    {
        v1[i]=i;
        cout<<"重設v1["<<i<<"]的值爲"<<i<<endl;
    }
    //下面就用迭代器來訪問
    //先設定四個迭代器來接收上面的四種操做的返回值
    vector<int>::iterator iter1=v1.begin(); //指向v1[0]
    vector<int>::iterator iter2=v1.end();   //指向v1[9]的下一個位置
    vector<int>::reverse_iterator iter3=v1.rbegin(); //指向v1[9]
    vector<int>::reverse_iterator iter4=v1.rend(); //指向v1[0]的前一個位置
    //經過輸出來驗證
    cout<<"iter1指向元素的值爲:"<<*iter1<<endl;
    cout<<"iter2-1指向元素的值爲:"<<*(iter2-1)<<endl;
    cout<<"iter3指向元素的值爲:"<<*iter3<<endl;
    cout<<"iter4-1指向元素的值爲:"<<*(iter4-1)<<endl;
    //這裏讀者可能用有疑問:iter4指向v1[0]的前一個位置,
    //那麼要訪問下一個位置,也不是v1[0],應該是加1,而不是減1啊。
    //其實,對於逆序迭代器,加表明前移,減表明後移,恰好和迭代器相反
    
    //爲了更進一步說明,咱們用迭代器和逆序迭代器來分別輸出容器的每個元素
    cout<<"用迭代器來輸出容器的每個元素"<<endl;
    for(vector<int>::iterator iter=v1.begin();
                              iter!=v1.end(); iter++) //加表明後移
        cout<<*iter<<" ";
    cout<<endl;
    cout<<"用逆序迭代器來輸出容器的每個元素"<<endl;
    for(vector<int>::reverse_iterator riter=v1.rbegin();
                                      riter!=v1.rend(); riter++)//加表明前移
        cout<<*riter<<" ";
    //這裏咱們明白了,原來逆序迭代器的加法意義和迭代器相反
    //是爲了讓 ++ 來遍歷迭代器和逆序迭代器的方法通用。
    
    return 0;
}


//============================
//運行結果:
//============================
// 爲便於區分每一個元素,下面重設每一個元素的值
// 重設v1[0]的值爲0
// 重設v1[1]的值爲1
// 重設v1[2]的值爲2
// 重設v1[3]的值爲3
// 重設v1[4]的值爲4
// 重設v1[5]的值爲5
// 重設v1[6]的值爲6
// 重設v1[7]的值爲7
// 重設v1[8]的值爲8
// 重設v1[9]的值爲9
// iter1指向元素的值爲:0
// iter2-1指向元素的值爲:9
// iter3指向元素的值爲:9
// iter4-1指向元素的值爲:0
// 用迭代器來輸出容器的每個元素
// 0 1 2 3 4 5 6 7 8 9 
// 用逆序迭代器來輸出容器的每個元素
// 9 8 7 6 5 4 3 2 1 0
//============================
相關文章
相關標籤/搜索