C++中的迭代器__C++

來源:互聯網
上載者:User

迭代器Iterator,它是指標的泛化形式,每種迭代器只能用於它自己的容器類。 一般的迭代器都擁有以下的操作符:

(1)前遞增和後遞增操作符++,將迭代器跳到下一個資料項目;

(2)前遞減和後遞減操作符–,將迭代器跳到上一個資料項目;

(3)相等操作符==和不相等操作符。=,測試兩個迭代器是否指向同一個位置;

(4)提領操作符*,加入P是迭代器變數,使用*p就能訪問位於p處的資料,有些容器既可讀又可寫,有些只能讀。

許多容器類都提供了以下的成員函數來返回迭代器對象,只想資料結構中的特殊資料元素:

• c.begin():返回容器c的迭代器,它指向容器c的第一個資料項目;• c.end():返回某個東西來測試迭代器在什麼時候越過容器c的最後一個資料項目,即end()傳回值標誌的是容器最後一個元素之後的位置,相當於一個哨兵值。

使用方法:for(p=c.begin();p!=c.end();p++)

例如使用vector的迭代器例子為:

#include <iostream>    #include <vector> //引用vector的標頭檔    using namespace std;    int main()    {        //定義一個vector容器        vector<int> container;        for(int i=1;i<=4;i++){            container.push_back(i); //存入資料        }        cout<<"Here is what id in the container:\n";        //定義一個迭代器        vector<int>::iterator p;        //遍曆vector        for(p=container.begin();p!=container.end();p++){            cout<<*p<<" ";        }        cout<<endl;        //使用*p將資料全部置為0        cout<<"Setting entries to 0:\n";        for(p=container.begin();p!=container.end();p++){            *p=0;        }        cout<<"Now container contains:\n";        for(p=container.begin();p!=container.end();p++){            cout<<*p<<" ";        }        cout<<endl;        return 0;    }

可以使用==或是!=來判斷兩個迭代器是否定位到同一個元素;

下面用一個例子來看一下vector的迭代器是如何使用操作運算子的:

vector<char> container1;    container1.push_back('A');    container1.push_back('B');    container1.push_back('C');    container1.push_back('D');    for(int i=0;i<4;i++){        cout<<"container1["<<i<<"] =="    <<container1[i]<<endl;    }    cout<<endl;    //定義一個迭代器指向向量第一個元素的位置    vector<char>::iterator p1=container1.begin();    //隨機訪問    cout<<"The third entry is "<<container1[2]<<endl; //括弧標記法    //以下兩個類似,他們都不會改變p中的迭代器的值    cout<<"The third entry is "<<p1[2]<<endl;    cout<<"The third entry is "<<*(p1+2)<<endl;    cout<<"which has value of container1[0]"<<" "<<*p1<<endl;    cout<<"Two steps forward and one step back:"<<endl;    p1++;    cout<<*p1<<endl;    p1++;    cout<<*p1<<endl;    p1--;    cout<<*p1<<endl;

根據運算子我們可以將迭代器分為: 正向迭代器:++ 雙向迭代器:++、– 隨機訪問迭代器:++、–、隨機訪問

其中以上的又可以各自分為常量和可變兩種,常量迭代器使用const_iterator修飾,例如:"vector<int>::const_itertaor p;",它不允許更改迭代器指向的元素。

此外還有一種逆向迭代器reverse_iterator,可以逆序遍曆:

vector<int>::reverse_iterator rp;    for(rp=container.rbegin();rp!=container.rend();rp--){        cout<<*rp<<endl;    }

常量版本為const_reverse_iterator;
當我們編程如下代碼時(vector中有ABCD四個元素):

    vector<char>::iterator p2;    for(p2=container1.begin();p2!=container1.end();p2++){        cout<<*p2<<" ";    }    vector<char>::reverse_iterator rp;    for(rp=container1.rbegin();rp!=container1.rend();rp++){        cout<<*rp<<" ";    }    cout<<endl;

輸出:

/*    A B C D    D C B A    */

此外還有很多種其他的迭代器,比如輸入迭代器、輸出迭代器等。

有關迭代器的參考資料可見:
Iterator-C++ Reference
Iterator library-cppreference

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.