« 上一篇: 第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());
Iterator Classes (迭代器类)
最新推荐文章于 2023-03-27 13:23:48 发布