/*- ========================================================== * 文件名 :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) //============================ //下一節開始講容器,會大量用到迭代器 //所以,這裏先講迭代器。 //============================