STL 迭代器

STL 迭代器共分为5大类型。 

   (1)输入迭代器

   (2)输出迭代器

   (3)前向迭代器

   (4)双向迭代器

   (5)随机迭代器

输入迭代器

   按顺序只读一次。完成的功能有:能进行构造和缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步

前移动,能进行读取值。输入迭代器重载主要操作符 如下所示。

           操作符                        

            说明

         operate*

            访问迭代元素值

         operate++()

            前置迭代指针++

         operate++(int)

           后置迭代指针++

         operate==

            迭代元素相等比较

        operate!=

           迭代元素不等比较

STL提供的主要输入迭代器是istream_iterator,支持表中的所有操作,值得注意的是它的构造函数,有两种形式:

istream_iterator()

默认的构造器,创建了一个流结束的迭代器。

istream_iterator(istream &)

参数是输入流。含义是从输入流中读数据,当遇到流结束符时停止。 

利用istream_iterator迭代器迭代标准输入流。

#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char* argv[])
{
	cout << “请输入数据(如111 222 333,(,结束)):”;
	istream_iterator<int>  a(cin) ;  //建立键盘输入流,用istream_iterator枚举整形数据
	istream_iterator<int>  b;	 //建立输入流结束迭代器
	while(1)
	{
	    cout << *a << endl;	//输出整形数据调用operator*()
	    a ++ ;			//迭代器指针指向下一个元素—>调用operator++(int)
	    if(a == b)                  //如果当前迭代器等于结束迭代器,则operator==
	    {                              //退出while循环
		break;
	    }
      }
}<span style="font-size: 30px;">
</span>

程序执行结果为:

请输入数据(111 222 333)111 222 333

111

222

333

程序分析:

当迭代指针a等于b 时到达尾部,输入最后要有个逗号,这是由于迭代类型是整型数,若无逗号,将一直执行,只要在流中输入非整型数,迭代器到此位置认为它不是整数,这时才会停止。(当然不一定非得是逗号,只要是非整性数都是可以的)。


输出迭代器

只写一次,完成的功能有:能进行构造或缺省构造,能被复制或赋值,能进行相等性比较,能进行逐步前向移动,能进行写入值(*p=x,但不能读出)。输出迭代器重载主要操作符 如下所示。

        操作符

         说明

         operate*

         分配迭代元素值空间

         operate=

        写入元素值

         operate++()

         前置迭代指针++

         operate++(int)

         后置迭代指针++

STL提供的主要输出迭代器是ostream_iterator,支持表2.2中的所有操作,值得注意的是它的构造函数,有两种形式:

ostream_iterator(ostream& out)

创建了流输出跌代器, 用来迭代out输出流。

ostream_iterator(ostream& out, const char *delim)

创建了流输出迭代器, 用来向out输出流输出数据,输出的数据之间用delim字符串分割,也即是每向out输出流输出一个数据后,再向out输出流输出一个分隔符delim


利用ostream_iterator向屏幕输出数据


#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char* argv[])
{
    cout << "输出迭代器演示结果为: " ;
    ostream_iterator<int> myout(cout, "\t"); //创建标准输出迭代器
    *myout = 1; 
    myout ++;
    *myout = 2;
    myout ++;
    *myout = 3;
     return 0;
}


执行结果为:
输出迭代器演示结果为:1	2	3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值