迭代器:
一、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之后
注意:最后一个循环的运算式:pos<coll.end()-1
注意:不允许修改任何基本型别(包括指针)的暂时值,但对于struct和class则允许。
一、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则允许。