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