STL 容器和迭代器连载4_顺序容器的操作1

  1 /*- ==========================================================
  2 *     文件名  :STL_con_ite_4.cpp
  3 *     开发人员:袁培荣
  4 *     当前版本:1.0.0.2595
  5 *     创建时间:2012-05-23
  6 *     修改时间:2012-05-23
  7 *     功能说明:STL 容器和迭代器连载4_顺序容器的操作1
  8 *     版权说明:版权所有 袁培荣 YuanPeirong 
  9 *     编译环境:Windows 7(x64) SP1 简体中文专业版
 10 *     编译器:  Visual Studio 2010 SP1(中文旗舰版)
 11                 MinGW 20120426 GNU GCC 4.6.2
 12                 Visual C++ 6.0 SP6(中文企业版)
 13 - ==========================================================*/
 14 
 15 #include <iostream>
 16 #include <vector>
 17 #include <list>
 18 #include <deque>
 19 #include <string>
 20 
 21 using std::cout;
 22 using std::endl;
 23 using std::vector;
 24 using std::list;
 25 using std::deque;
 26 using std::string;
 27 
 28 int main(int argc, char* argv[])
 29 {
 30     //在讲顺序容器的操作前,补充一个知识点:
 31     //那就是容器的容器的定义:
 32     vector<vector<int> > con1;
 33     vector<list<string> > con2;
 34     list<list<int> > con3;
 35     list<vector<string> > con4;
 36     vector<list<deque<int> > > con5;
 37     //相信你也已经看明白了,无非就是一种嵌套,唯一要注意的是:
 38     //两个">"符号之间一定要有空格,不然编译器会误认为">>"。
 39     
 40     //一般,容器都为自己定义了一些数据类型,如:
 41     // (在STL vector 介绍连载1-2-3中使用过一些)
 42     // size_type 无符号的整型,用来存储此容器类型的最大可能容器长度
 43     // iterator  容器的迭代器类型
 44     // ……其他不一一介绍
 45     
 46     //下面来介绍第一组操作,也是我们前面用过的
 47     // begin() 返回一个迭代器,指向容器的第一个元素
 48     // end() 返回一个迭代器,指向容器的最后一个元素的下一位置
 49     // 以上两个的返回类型是iterator或者const_iterator
 50     // rbegin() 返回一个逆序迭代器,指向容器的最后一个元素
 51     // rend() 返回一个逆序迭代器,指向容器的第一个元素的前一个位置
 52     // 以上两个的返回类型是reverse_iterator或者const_reverse_iterator
 53     //下面是一个示例:
 54     vector<int> v1(10,0); //创建一个容器,有10元素,每个都初始化为0
 55     cout<<"为便于区分每个元素,下面重设每个元素的值"<<endl;
 56     for(int i=0; i!=10; i++)
 57     {
 58         v1[i]=i;
 59         cout<<"重设v1["<<i<<"]的值为"<<i<<endl;
 60     }
 61     //下面就用迭代器来访问
 62     //先设定四个迭代器来接收上面的四种操作的返回值
 63     vector<int>::iterator iter1=v1.begin(); //指向v1[0]
 64     vector<int>::iterator iter2=v1.end();   //指向v1[9]的下一个位置
 65     vector<int>::reverse_iterator iter3=v1.rbegin(); //指向v1[9]
 66     vector<int>::reverse_iterator iter4=v1.rend(); //指向v1[0]的前一个位置
 67     //通过输出来验证
 68     cout<<"iter1指向元素的值为:"<<*iter1<<endl;
 69     cout<<"iter2-1指向元素的值为:"<<*(iter2-1)<<endl;
 70     cout<<"iter3指向元素的值为:"<<*iter3<<endl;
 71     cout<<"iter4-1指向元素的值为:"<<*(iter4-1)<<endl;
 72     //这里读者可能用有疑问:iter4指向v1[0]的前一个位置,
 73     //那么要访问下一个位置,也不是v1[0],应该是加1,而不是减1啊。
 74     //其实,对于逆序迭代器,加代表前移,减代表后移,刚好和迭代器相反
 75     
 76     //为了更进一步说明,我们用迭代器和逆序迭代器来分别输出容器的每一个元素
 77     cout<<"用迭代器来输出容器的每一个元素"<<endl;
 78     for(vector<int>::iterator iter=v1.begin();
 79                               iter!=v1.end(); iter++) //加代表后移
 80         cout<<*iter<<" ";
 81     cout<<endl;
 82     cout<<"用逆序迭代器来输出容器的每一个元素"<<endl;
 83     for(vector<int>::reverse_iterator riter=v1.rbegin();
 84                                       riter!=v1.rend(); riter++)//加代表前移
 85         cout<<*riter<<" ";
 86     //这里我们明白了,原来逆序迭代器的加法意义和迭代器相反
 87     //是为了让 ++ 来遍历迭代器和逆序迭代器的方法通用。
 88     
 89     return 0;
 90 }
 91 
 92 
 93 //============================
 94 //运行结果:
 95 //============================
 96 // 为便于区分每个元素,下面重设每个元素的值
 97 // 重设v1[0]的值为0
 98 // 重设v1[1]的值为1
 99 // 重设v1[2]的值为2
100 // 重设v1[3]的值为3
101 // 重设v1[4]的值为4
102 // 重设v1[5]的值为5
103 // 重设v1[6]的值为6
104 // 重设v1[7]的值为7
105 // 重设v1[8]的值为8
106 // 重设v1[9]的值为9
107 // iter1指向元素的值为:0
108 // iter2-1指向元素的值为:9
109 // iter3指向元素的值为:9
110 // iter4-1指向元素的值为:0
111 // 用迭代器来输出容器的每一个元素
112 // 0 1 2 3 4 5 6 7 8 9 
113 // 用逆序迭代器来输出容器的每一个元素
114 // 9 8 7 6 5 4 3 2 1 0
115 //============================

 

posted @ 2012-05-23 23:18  天远  阅读(203)  评论(0)    收藏  举报

版权所有 © 2010-2020 YuanPeirong TianYuan All Rights Reserved. Powered By 天远