/*- ========================================================== * 文件名 :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 //============================