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 //============================