STL 容器和迭代器連載2_迭代器

/*- ==========================================================
*     文件名  :STL_con_ite_2.cpp
*     開發人員:袁培榮
*     當前版本:1.0.0.2595
*     建立時間:2012-05-20
*     修改時間:2012-05-20
*     功能說明:STL 容器和迭代器連載2_迭代器
*     版權說明:版權全部 袁培榮 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>  //包含STL 的vector 頭文件才能使用vector

using std::cout;
using std::endl;
using std::vector; //vector是一個類模板,定義在命名空間std裏面

int main(int argc, char* argv[])
{
    //在STL vector 介紹連載1-2-3中,
    //曾經初步講解了vector的用法,下面來介紹迭代器
    
    vector<int> v1(10,5); //構造一個容器
    //構造一個迭代器,並指向v1的第一個元素
    vector<int>::iterator iter1=v1.begin(); 
    //構造一個迭代器,並指向v1的第最後一個元素的下一個位置
    vector<int>::iterator iter2=v1.end();
    //這裏要注意,.end()操做不是返回最後一個元素的位置
    //在迭代器裏面,全部的範圍都是一個左閉合區間,即:
    // [迭代器起,迭代器止) 這對編程是頗有利的,也是很安全的
    
    
    *iter1=0;           // * 操做用來解引用,訪問容器內的元素
    cout<<v1[0]<<endl;  //這種操做和指針很像,但更安全
    cout<<*iter1<<endl; //這種操做能夠做左值,也能夠做右值
    //以上兩句輸出結果都爲0
    
    ++iter1; //支持前置++操做
    *iter1=1;           
    cout<<v1[1]<<endl;  
    cout<<*iter1<<endl; 
    //以上兩句輸出結果都爲1
    
    iter1++; //支持後置++操做
    *iter1=2;           
    cout<<v1[2]<<endl;  
    cout<<*iter1<<endl; 
    //以上兩句輸出結果都爲2
    
    --iter2; //支持前置--操做
    *iter2=9;           
    cout<<v1[9]<<endl;  
    cout<<*iter2<<endl; 
    //以上兩句輸出結果都爲9
    //這也證實了.end()操做返回的是最後一個元素的下一個位置
    //而不是最後一個元素的位置
    
    iter2--; //支持後置++操做
    *iter2=8;           
    cout<<v1[8]<<endl;  
    cout<<*iter2<<endl; 
    //以上兩句輸出結果都爲8
    
    if(iter1==iter2)  //支持 == 操做
        cout<<"兩個迭代器相等"<<endl;
    else
        cout<<"兩個迭代器不相等"<<endl;
    //以上輸出結果爲: 兩個迭代器不相等
    
    //支持 += 和 -= 操做    
    iter1+=3; //從指向v1[2]改爲指向v1[5]
    iter2-=3; //從指向v1[8]改爲指向v1[5]
    
    if(iter1!=iter2)  //支持 != 操做
        cout<<"兩個迭代器不相等"<<endl;
    else
        cout<<"兩個迭代器相等"<<endl;
    //以上輸出結果爲: 兩個迭代器相等
    
    //此外還支持的操做有:
    // iter1+=iter2
    // iter1-=iter2
    
    //另外對vector和deque還支持:
    // iter1-iter2
    // iter1>iter2
    // iter1>=iter2
    // iter1<iter2    
    // iter1<=iter2

    return 0;
}

//============================
//運行結果:
//============================
// 0
// 0
// 1
// 1
// 2
// 2
// 9
// 9
// 8
// 8
// 兩個迭代器不相等
// 兩個迭代器相等
//============================

//============================
//重點:
//============================
//操做和概念和指什相似,但有不一樣
//迭代器不是指針,二者不一樣的東西
//迭代器的範圍採用左閉合區間 [a,b)
//============================
//下一節開始講容器,會大量用到迭代器
//所以,這裏先講迭代器。
//============================
相關文章
相關標籤/搜索