迭代器的类型及操作

迭代器:
一、input(输入)迭代器:
input迭代器只能一次一个向前读取元素,按此顺序一个个传回元素值。
input迭代器的各项操作:
*iter  读取实际元素
iter->member  读取实际元素的成员
++iter  向前步进,传回新位置
iter++  向前步进,传回旧位置
iter1 == iter2  判断两个迭代器是否相等
TYPE(iter)  复制迭代器(copy构造函数)


二、output(输出)迭代器:
output迭代器哦和input迭代器相反,其作用是将元素值一个个写入。也就是说,你只能一个元素一个元素地赋新值。
output相关操作:
*iter = value将元素值写到迭代器位置
++iter  向前步进,传回新位置
iter++  向后步进,返回旧位置
TYPE(iter)  复制迭代器(copy构造函数)


注:一般的迭代器具有input和output迭代器几乎所有的性质。


三、forward(向前)迭代器:
forword迭代器是input和output迭代器的结合。
forword迭代器的各项操作:
*iter  存取实际元素
iter->member  读取实际元素的成员
++iter  向前步进,传回新位置
iter++  向前步进,传回旧位置
iter1 == iter2  判断两个迭代器是否相等
TYPE(iter)  复制迭代器(copy构造函数)
TYPE()  产生迭代器(default构造函数)
iter1 = iter2  赋值


四、bidirectional(双向)迭代器
bidirectional迭代器在forword迭代器的基础上增加了回头遍历的能力。换言之,它支持一步步后退的操作。
新增操作:
--iter  退步(传回新位置)
iter--  退步(传回旧位置)


五、random access(随机存取)迭代器
random access迭代器新增操作
iter[n]  取索引位置为n的元素
iter += n  向前跳n个元素
iter -= n  向后跳n个元素
iter + n   传回iter之后的第n个元素
n + iter   传回iter之后的第n个元素
iter - n   传回iter之前的第n个元素
iter1 - iter2  传回iter1和iter2之间的距离
iter1 < iter2  判断iter1是否在iter2之前
iter1 > iter2  判断iter1是否在iter2之后
iter1 <= iter2 判断iter1是否不在iter2之后

iter1 >= iter2 判断iter1是否不在iter2之前

六、源码示例:

#include<iostream>
#include<vector>
using namespace std;

void main()
{
	vector<int> coll;

	for(int i = -3;i < 9;++i ){
		coll.push_back(i);
	}

	cout<<"number/distance:"<<coll.end()-coll.begin()<<endl;

	vector<int>::iterator pos;
	for(pos = coll.begin(); pos < coll.end(); ++pos)
		cout<<*pos<<"\t";
	cout<<endl;
	for(int i = 0;i < coll.size(); ++i)
		cout<<coll.begin()[i]<<"\t";
	cout<<endl;

	for( pos= coll.begin();pos<coll.end()-1; pos+=2)
		cout<<*pos<<"\t";
	cout<<endl;
}

注意:最后一个循环的运算式:pos<coll.end()-1

这里要求coll至少包含一个元素。如果群集为空,coll.end()-1便会位于coll.begin()之前。虽然如此一来,上例操作可能仍然有效,但严格的说,将迭代器移至“起点更前面”,将会导致未定义行为。同样的,pos += 2将迭代器移至end()之后,也会导致未定义行为。


注意:不允许修改任何基本型别(包括指针)的暂时值,但对于struct和class则允许。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值