c++primer学习笔记(3)

函数对象实现和迭代器
[@more@]
12.3.6 实现函数对象

自定义函数对象的三种形式:

1. 函数对象类定义的最简单形式包含一个被重载的函数调用操作符。

2. 引入一个数据成员来存储被比较的值以及一个构造函数,把这个成员初始化为用户指定的值。

3. 不使用构造函数它根据被比较的值对类参数化。

12.4 回顾iterator

const 容器只能被绑定在const iterator 上,这样的要求与const 指针只能指向const 数组的

行为一样。

12.4.1 插入iterator

标准库定义一组三个插入iterator 的适配器函数,它们返回特定的插入iterator

1back_inserter() 它使用容器的push_back()插入操作代替赋值操作符back_inserter()

的实参是容器自己

(2) front_inserter() 它使用容器的push_front()插入操作代替赋值操作符front_inserter()

的实参也是容器自己。注意:vector不支持push_front方法

3inserter() 它调用容器的insert()插入操作代替赋值操作符。inserter()要求两个实参

容器本身以及它的一个iterator 指示起始插入的位置。

12.4.2 反向iterator

1. begin()end()操作分别返回指向容器的首元素和容器的末元素下一位置的iterator

2. 返回一个反向iterator 也是有可能的,一个从末元素到首元素遍历容器的iterator ,对所有容器类型都能支持这种能力的操作是rbegin()rend()

3. 与前向iterator 一样它有const 和非const两种实例

12.4.3 iostream iterator

标准库为输入和输出iostream iterator 提供了支持,它们可以与标准库容器类型和泛

型算法结合起来工作。

1. istream_iterator 类支持在一个istream 或其派生类如ifstream 输入文件流上的iterator 操作。

2ostream_iterator 类支持在一个ostream 或其派生类如ofstream 输出文件流上的iterator 操作

注意:为了使用这两种iterator 我们必须包含iterator 头文件#include

例如:

istream_iterator< int > input( cin );

istream_iterator< int > end_of_stream;

vector vec;

copy ( input, end_of_stream, inserter( vec, vec.begin() ));

sort( vec.begin(), vec.end(), greater() );

ostream_iterator< int > output( cout, " " );

unique_copy( vec.begin(), vec.end(), output );

12.4.4 istream_iterator

一般形式声明一个istream_iterator

istream_iterator identifier( istream& );

例如:

// 从命名的文件中读入一个字符串序列

ifstream infile( "C++Primer" );

istream_iterator< string > is_string( infile );

开始位置:用一个istream 对象初始化的istream_iterator

结束位置:使用istream_iterator 缺省构造函数。例如:istream_iterator< string > end_of_stream;

例如:

vector text;

// Ok: 提供 iterator

copy( is_string, end_of_stream, inserter( text, text.begin() ));

12.4.5 ostream_iterator

用下列两种形式之一可以声明ostream_iterator

ostream_iterator identifier( ostream& )

ostream_iterator identifier( ostream&, char* delimiter )

说明:

1Type 表示任意一个已定义了输出操作符operator>> 的内置或用户定义的类型。

(2) delimiter 表示一个C 风格字符串它被输出到文件的每个元素后面,因为它是一个C 风格字符串所以它必须有空终止符。

(3) ostream实参可以是一个实际的ostream 类对象,如cout 或任意公有派生的ostream 子类型如ofstream

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/32405/viewspace-927841/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/32405/viewspace-927841/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值