STL 容器和迭代器连载2_迭代器

  1 /*- ==========================================================
  2 *     文件名  :STL_con_ite_2.cpp
  3 *     开发人员:袁培荣
  4 *     当前版本:1.0.0.2595
  5 *     创建时间:2012-05-20
  6 *     修改时间:2012-05-20
  7 *     功能说明:STL 容器和迭代器连载2_迭代器
  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>  //包含STL 的vector 头文件才能使用vector
 17 
 18 using std::cout;
 19 using std::endl;
 20 using std::vector; //vector是一个类模板,定义在命名空间std里面
 21 
 22 int main(int argc, char* argv[])
 23 {
 24     //在STL vector 介绍连载1-2-3中,
 25     //曾经初步讲解了vector的用法,下面来介绍迭代器
 26     
 27     vector<int> v1(10,5); //构造一个容器
 28     //构造一个迭代器,并指向v1的第一个元素
 29     vector<int>::iterator iter1=v1.begin(); 
 30     //构造一个迭代器,并指向v1的第最后一个元素的下一个位置
 31     vector<int>::iterator iter2=v1.end();
 32     //这里要注意,.end()操作不是返回最后一个元素的位置
 33     //在迭代器里面,所有的范围都是一个左闭合区间,即:
 34     // [迭代器起,迭代器止) 这对编程是很有利的,也是很安全的
 35     
 36     
 37     *iter1=0;           // * 操作用来解引用,访问容器内的元素
 38     cout<<v1[0]<<endl;  //这种操作和指针很像,但更安全
 39     cout<<*iter1<<endl; //这种操作可以作左值,也可以作右值
 40     //以上两句输出结果都为0
 41     
 42     ++iter1; //支持前置++操作
 43     *iter1=1;           
 44     cout<<v1[1]<<endl;  
 45     cout<<*iter1<<endl; 
 46     //以上两句输出结果都为1
 47     
 48     iter1++; //支持后置++操作
 49     *iter1=2;           
 50     cout<<v1[2]<<endl;  
 51     cout<<*iter1<<endl; 
 52     //以上两句输出结果都为2
 53     
 54     --iter2; //支持前置--操作
 55     *iter2=9;           
 56     cout<<v1[9]<<endl;  
 57     cout<<*iter2<<endl; 
 58     //以上两句输出结果都为9
 59     //这也证明了.end()操作返回的是最后一个元素的下一个位置
 60     //而不是最后一个元素的位置
 61     
 62     iter2--; //支持后置++操作
 63     *iter2=8;           
 64     cout<<v1[8]<<endl;  
 65     cout<<*iter2<<endl; 
 66     //以上两句输出结果都为8
 67     
 68     if(iter1==iter2)  //支持 == 操作
 69         cout<<"两个迭代器相等"<<endl;
 70     else
 71         cout<<"两个迭代器不相等"<<endl;
 72     //以上输出结果为: 两个迭代器不相等
 73     
 74     //支持 += 和 -= 操作    
 75     iter1+=3; //从指向v1[2]改成指向v1[5]
 76     iter2-=3; //从指向v1[8]改成指向v1[5]
 77     
 78     if(iter1!=iter2)  //支持 != 操作
 79         cout<<"两个迭代器不相等"<<endl;
 80     else
 81         cout<<"两个迭代器相等"<<endl;
 82     //以上输出结果为: 两个迭代器相等
 83     
 84     //此外还支持的操作有:
 85     // iter1+=iter2
 86     // iter1-=iter2
 87     
 88     //另外对vector和deque还支持:
 89     // iter1-iter2
 90     // iter1>iter2
 91     // iter1>=iter2
 92     // iter1<iter2    
 93     // iter1<=iter2
 94 
 95     return 0;
 96 }
 97 
 98 //============================
 99 //运行结果:
100 //============================
101 // 0
102 // 0
103 // 1
104 // 1
105 // 2
106 // 2
107 // 9
108 // 9
109 // 8
110 // 8
111 // 两个迭代器不相等
112 // 两个迭代器相等
113 //============================
114 
115 //============================
116 //重点:
117 //============================
118 //操作和概念和指什类似,但有不同
119 //迭代器不是指针,两者不同的东西
120 //迭代器的范围采用左闭合区间 [a,b)
121 //============================
122 //下一节开始讲容器,会大量用到迭代器
123 //因此,这里先讲迭代器。
124 //============================

 

posted @ 2012-05-20 21:31  天远  阅读(289)  评论(0)    收藏  举报

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