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

001 /*- ==========================================================
002 *     文件名  :STL_con_ite_2.cpp
003 *     开发人员:袁培荣
004 *     当前版本:1.0.0.2595
005 *     创建时间:2012-05-20
006 *     修改时间:2012-05-20
007 *     功能说明:STL 容器和迭代器连载2_迭代器
008 *     版权说明:版权所有 袁培荣 YuanPeirong
009 *     编译环境:Windows 7(x64) SP1 简体中文专业版
010 *     编译器:  Visual Studio 2010 SP1(中文旗舰版)
011                 MinGW 20120426 GNU GCC 4.6.2
012                 Visual C++ 6.0 SP6(中文企业版)
013 - ==========================================================*/
014  
015 #include <iostream>
016 #include <vector>  //包含STL 的vector 头文件才能使用vector
017  
018 using std::cout;
019 using std::endl;
020 using std::vector; //vector是一个类模板,定义在命名空间std里面
021  
022 int main(int argc, char* argv[])
023 {
024     //在STL vector 介绍连载1-2-3中,
025     //曾经初步讲解了vector的用法,下面来介绍迭代器
026      
027     vector<int> v1(10,5); //构造一个容器
028     //构造一个迭代器,并指向v1的第一个元素
029     vector<int>::iterator iter1=v1.begin();
030     //构造一个迭代器,并指向v1的第最后一个元素的下一个位置
031     vector<int>::iterator iter2=v1.end();
032     //这里要注意,.end()操作不是返回最后一个元素的位置
033     //在迭代器里面,所有的范围都是一个左闭合区间,即:
034     // [迭代器起,迭代器止) 这对编程是很有利的,也是很安全的
035      
036      
037     *iter1=0;           // * 操作用来解引用,访问容器内的元素
038     cout<<v1[0]<<endl;  //这种操作和指针很像,但更安全
039     cout<<*iter1<<endl; //这种操作可以作左值,也可以作右值
040     //以上两句输出结果都为0
041      
042     ++iter1; //支持前置++操作
043     *iter1=1;          
044     cout<<v1[1]<<endl; 
045     cout<<*iter1<<endl;
046     //以上两句输出结果都为1
047      
048     iter1++; //支持后置++操作
049     *iter1=2;          
050     cout<<v1[2]<<endl; 
051     cout<<*iter1<<endl;
052     //以上两句输出结果都为2
053      
054     --iter2; //支持前置--操作
055     *iter2=9;          
056     cout<<v1[9]<<endl; 
057     cout<<*iter2<<endl;
058     //以上两句输出结果都为9
059     //这也证明了.end()操作返回的是最后一个元素的下一个位置
060     //而不是最后一个元素的位置
061      
062     iter2--; //支持后置++操作
063     *iter2=8;          
064     cout<<v1[8]<<endl; 
065     cout<<*iter2<<endl;
066     //以上两句输出结果都为8
067      
068     if(iter1==iter2)  //支持 == 操作
069         cout<<"两个迭代器相等"<<endl;
070     else
071         cout<<"两个迭代器不相等"<<endl;
072     //以上输出结果为: 两个迭代器不相等
073      
074     //支持 += 和 -= 操作   
075     iter1+=3; //从指向v1[2]改成指向v1[5]
076     iter2-=3; //从指向v1[8]改成指向v1[5]
077      
078     if(iter1!=iter2)  //支持 != 操作
079         cout<<"两个迭代器不相等"<<endl;
080     else
081         cout<<"两个迭代器相等"<<endl;
082     //以上输出结果为: 两个迭代器相等
083      
084     //此外还支持的操作有:
085     // iter1+=iter2
086     // iter1-=iter2
087      
088     //另外对vector和deque还支持:
089     // iter1-iter2
090     // iter1>iter2
091     // iter1>=iter2
092     // iter1<iter2   
093     // iter1<=iter2
094  
095     return 0;
096 }
097  
098 //============================
099 //运行结果:
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 //============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值