Iterator Classes (迭代器类)

	« 上一篇: 第13章 排序和查找  下一篇: 第15章 Function Object Classes 函数对象类 »  

 

第14章 Iterator Classes (迭代器类)

村少 @ 2005-12-29 15:30





第14章

Iterator classes 

迭代器类



在头文件<iterator>



14.1 Insert Iterators

是一种Output Iterator.



14.1.1 front_insert_iterator

front_insert_iterator<FrontInsertionSequence>

这个类是具有Output Iterator功能的一个迭代器适配器类.通过该类型完成的赋值动作.可以将对象

插入到序列的开头(原第一个元素之前).

使用例子:

list<int> l;

l.push_front(3);

front_insert_iterator<list<int> > ii(l);

*ii ++ = 0; //将0安插到l最前边.

*ii++ = 1; // 将1安插到0前边;

................

再看一个例子. 它将一个序列的元素反序拷贝到另一序列中了:

vector<int> v;

......

list<int> l;

copy(v.begin(), v.end(), front_inserter(l)); //不明确写出front_insert_iterator类型.

                         //而是用辅助函数front_inserter . 这样比较方便.



front_insert_iterator 类的一些成员函数:

         front_insert_iterator::front_insert_iterator(FrontInsertionSequence & s); //构造函数.接受一个容器类的对象的参数.

         //拷贝构造函数.

         //析构函数

         front_insert_iterator& front_insert_iterator:: operator* (); //用来实现 *i = x. 在序列前插入.

         front_insert_iterator& front_insert_iterator:: operator++(); //重载++ 包括前缀后缀的.

还有一个非成员的函数:

         template <class FrontInsertionSequence>

         front_insert_iterator <FrontInsertionSequence> 

         front_inserter(FrontInsertionSequence& s) ;  

         //等价于  front_insert_iterator <FrontInsertionSequence>(s); 构造函数. 但使用更方便.



14.1.2 back_insert_iterator

back_insert_iterator <BackInsertionSequence>

它和上一个迭代器适配器类相似. 在序列后边插入元素.

如果ii是一个back_insert_iterator<Seq> 

则 *ii = x 就相当于 seq.push_back(x);



14.1.3 insert_iterator

insert_iterator <Container>

迭代器适配器类. 它的构造函数要两个参数:

          insert_iterator::insert_iterator(Container& c, Container::iterator i); 

          //赋值时会在i所指元素之前插入元素.

此外还有一个返回该类对象的非成员函数inserter :

         template<class Container, class Iterator>

         insert_iterator<Container> inserter(Container& c, Iterator p);

         这个函数相当于insert_iterator<container>(c, i); 但更方便.





14.2 Stream Iterators

配合输入输出流类工作.



14.2.1 istream_iterator

istream_iterator<T, charT, traits, Distance>

是一种Input Iterator.  它能为"来自某个basic_istream"的对象执行格式化

输入动作. 一旦stream结束. istream_iterator便呈现一个特别的"stream终结值".

它的模板参数分别为:

       T      istream_iterator的value_type. 即*运算返回值的类型.

       CharT       InputStream的chartype . 缺省为char.

       traits        InputStream 的char traits class . 缺省为 char_traits<charT>.

       Distance       Iterator的difference type. 缺省为 ptrdiff_t.

在这个类中定义的还有:

      char_type : charT

      traits_type: traits

      istream_type : basic_istream<charT, traits>

构造函数:

        istream_iterator( istream_type& s); //当s到达stream终点时. 这个迭代器和end-of-stream iterator比较结果会相等.

缺省构造函数:

        istream_iterator() //它产生一个end-of-stream iterator .那是个past-the-end(结尾之后)的iterator.



14.2.2 ostream_iterator

ostream_iterator<T , charT , traits>

它是一个Output Iterator. 能将一个T object格式化输出到某个指定的basic_ostream中.

模板参数:

       T:  被写到ostream的那些对象的类型. 

       charT: Output stream 的chartype . 缺省为char

       traits:  Output stream 的chartrais class . 缺省为 char_traits<charT>

 在这个类中定义的还有:

      char_type : charT

      traits_type: traits

      ostream_type : basic_ostream<charT, traits>

构造函数:

     ostream_iterator(ostream_type& s); //它产生一个osteram_iterator .使得对这个迭代器的赋值就像 s << t 一样.

     ostream_iterator(ostream_type& s, const charT* delim);

     // 这个构造函数具有定界符号(delimiter). 它产生的osteram_iterator. 使得通过对该迭代器的赋值就像 s << t << delim 一样.



14.2.3 istreambuf_iterator

istreambuf_iterator<chatT, traits>

这个类和istream_iterator非常相似. 但它只是从input stream读入单个字符. 它是一种Input Iterator. 

在遇到stream终结时. 会以一个past-the-end值表示之.

模板参数:

   charT:  istreambuf_iterator的valuetype. 表示这个迭代器会读入类型为charT的字符.

   traits:   InputStream的char_traits class . 缺省为 char_traits<charT>



使用例子:

  istreambuf_iterator<char> first(cin);

  istreambuf_iterator<char> end;

  vector<char> buffer(first, end);

  .....



14.2.4 ostreambuf_iterator

ostreambuf_iterator <charT, traits>

和上一个类似.





14.3 reverse_iterator

reverse_iterator<Iterator>

这是一个迭代器适配器类. 它能够在区间上逆向移动.它的++相当于原迭代器的--

例如有 list<int> l;

把l的end()转换成该类迭代器用 reverse_iterator< list<int> :: iterator> ( l.end());





 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值