? 上一篇: 第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 (迭代器类)
热度:63 发布时间:2024-01-14 07:25:40.0
相关解决方案
- jsp iterator 标签判断里边的重复值
- struts2 的<s:iterator>标签展示未完全初始化的数组出现奇怪的有关问题
- 在action中怎么在<s:iterator>获取radio 对应值
- 怎么实现<s:iterator>取值一次,根据取得题型加入不同的input
- 关于<s:iterator>遍历数据。解决办法
- 在线考试中用struts2的<s:iterator >遍历从数据库中查询到的试题和选项解决方案
- s:iterator 迭代不出数据解决思路
- 关于<s:iterator>取值的有关问题!跪求解答~
- s:iterator 选中一行,跳转到edit页面,该怎么处理
- java Iterator<E>的有关问题
- 黑马软件工程师 java Iterator foreach
- [求助]C:\Tomcat 5.5\webapps\ROOT\WEB-INF\classes
- <s:iterator value 有值但<s:property 取不到值
- Struts2 <s:iterator> 遍历 List<Map<String, String>>
- 关于<s:iterator>取值的有关问题!跪求解答~
- <ww:iterator> 迭代 Map<String,List<AspectVo>>
- 使用了<s:iterator>标签循环生成的input块,如何取到某一个特定块的值呢
- 让IE6支持伪种(Pseudo-classes)
- s:iterator 怎么将集合迭代一行两列
- iterator 迭代标签 在迭代地图的时候的巧妙使用
- iterator 以及rs中涉及到游标的移动有关问题
- 犀牛书第五版读书笔记――Chapter 9. Classes, Constructors, and Prototypes(第二一部分)
- 犀牛书第五版读书笔记――Chapter 9. Classes, Constructors, and Prototypes(第部分)
- 如何在页面的<s:iterator>标签从javascript中获取value值
- Struts2标签运用之s:iterator
- 伪种(Pseudo-Classes)&伪对象(Pseudo-Elements)详解
- struts2 jsp页面访问List, set 跟<s:iterator>的使用
- struts2 标签的应用之二 s:iterator
- 犀牛书札记:(11)Classes, Constructors and Prototypes
- struts2中<s:iterator><s:select>标签的运用_实例