/*- ==========================================================
* 文件名 :STL_con_ite_2.cpp
* 开发人员:袁培荣
* 当前版本:1.0.0.2595
* 创建时间:2012-05-20
* 修改时间:2012-05-20
* 功能说明:STL 容器和迭代器连载2_迭代器
* 版权说明:版权所有 袁培荣 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> //包含STL 的vector 头文件才能使用vector
using std::cout;
using std::endl;
using std::vector; //vector是一个类模板,定义在命名空间std里面
int main(int argc, char* argv[])
{
//在STL vector 介绍连载1-2-3中,
//曾经初步讲解了vector的用法,下面来介绍迭代器
vector<int> v1(10,5); //构造一个容器
//构造一个迭代器,并指向v1的第一个元素
vector<int>::iterator iter1=v1.begin();
//构造一个迭代器,并指向v1的第最后一个元素的下一个位置
vector<int>::iterator iter2=v1.end();
//这里要注意,.end()操作不是返回最后一个元素的位置
//在迭代器里面,所有的范围都是一个左闭合区间,即:
// [迭代器起,迭代器止) 这对编程是很有利的,也是很安全的
*iter1=0; // * 操作用来解引用,访问容器内的元素
cout<<v1[0]<<endl; //这种操作和指针很像,但更安全
cout<<*iter1<<endl; //这种操作可以作左值,也可以作右值
//以上两句输出结果都为0
++iter1; //支持前置++操作
*iter1=1;
cout<<v1[1]<<endl;
cout<<*iter1<<endl;
//以上两句输出结果都为1
iter1++; //支持后置++操作
*iter1=2;
cout<<v1[2]<<endl;
cout<<*iter1<<endl;
//以上两句输出结果都为2
--iter2; //支持前置--操作
*iter2=9;
cout<<v1[9]<<endl;
cout<<*iter2<<endl;
//以上两句输出结果都为9
//这也证明了.end()操作返回的是最后一个元素的下一个位置
//而不是最后一个元素的位置
iter2--; //支持后置++操作
*iter2=8;
cout<<v1[8]<<endl;
cout<<*iter2<<endl;
//以上两句输出结果都为8
if(iter1==iter2) //支持 == 操作
cout<<"两个迭代器相等"<<endl;
else
cout<<"两个迭代器不相等"<<endl;
//以上输出结果为: 两个迭代器不相等
//支持 += 和 -= 操作
iter1+=3; //从指向v1[2]改成指向v1[5]
iter2-=3; //从指向v1[8]改成指向v1[5]
if(iter1!=iter2) //支持 != 操作
cout<<"两个迭代器不相等"<<endl;
else
cout<<"两个迭代器相等"<<endl;
//以上输出结果为: 两个迭代器相等
//此外还支持的操作有:
// iter1+=iter2
// iter1-=iter2
//另外对vector和deque还支持:
// iter1-iter2
// iter1>iter2
// iter1>=iter2
// iter1<iter2
// iter1<=iter2
return 0;
}
//============================
//运行结果:
//============================
// 0
// 0
// 1
// 1
// 2
// 2
// 9
// 9
// 8
// 8
// 两个迭代器不相等
// 两个迭代器相等
//============================
//============================
//重点:
//============================
//操作和概念和指什类似,但有不同
//迭代器不是指针,两者不同的东西
//迭代器的范围采用左闭合区间 [a,b)
//============================
//下一节开始讲容器,会大量用到迭代器
//因此,这里先讲迭代器。
//============================
STL 容器和迭代器连载2_迭代器
最新推荐文章于 2024-09-03 16:17:30 发布