首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

泛型算法 - 一【C++ Primer 学习笔记 - 第十一章】

2012-11-09 
泛型算法 - 1【C++ Primer 学习笔记 - 第十一章】标准容器定义了很少的操作,如添加、删除元素,访问第一个、最

泛型算法 - 1【C++ Primer 学习笔记 - 第十一章】
标准容器定义了很少的操作,如添加、删除元素,访问第一个、最后一个元素,获取容器大小等。
但是,用户可能需要其他更多的有用操作,如:排序、查找、查找最大元素、查找最小元素等,
为了应对这种需要,
标准库并没有为每种容器类型都定义实现相应的成员函数,而是定义了一组泛型算法
因为他们实现共同的操作,因此,称为算法
所谓泛型,指的是,它们可以操作在多种容器类型上,如标准库类型 vector、 list ,内置数组类型、甚至其他类型的序列。

自定义类型,只要与标准库兼容,同样可以使用这些泛型算法。


list<int> ilist, ilist2, ilist3, ilist4;// ilist: 3, 2, 1, 0for(list<int>::size_type i=0; i!=4; ++i){ilist.push_front(i);}// ilist2: 0, 1, 2, 3copy(ilist.begin(), ilist.end(), front_inserter(ilist2));// ilist3: 3, 2, 1, 0// 元素在ilist3 的固定位置插入// 该位置,插入第一个元素之前,是头部,// 插入一个元素之后,就不是头部了。copy(ilist.begin(), ilist.end(), inserter(ilist3, ilist3.begin()));// ilist4: 3, 2, 1, 0copy(ilist.begin(), ilist.end(), back_inserter(ilist4));list<int>::iterator iter = ilist4.begin();



iostream 迭代器

iostream 类型不是容器,但标准库同样提供了在 iostream 对象上使用的迭代器
istream_iterator 用于读取输入流, ostream_iterator 用于写输出流

将对应的流,视为特定类型的元素序列。
流迭代器只定义了基本的迭代操作:自增、解引用、赋值。
istream 迭代器可以比较是否相等;
ostream 迭代器不提供比较运算

istream_iterator<T> in(strm);
创建从输入流 strm 中读取 T 类型对象的 istream_iterator 对象

istream_iterator<T> in;
istream_iterator 对象的超出末端迭代器

ostream_iterator<T> in(strm);
创建将 T 类型的对象写到输出流 strm 的 ostream_iterator 对象

ostream_iterator<T> in(strm, delim);
创建将 T 类型的对象写到输出流 strm 的 ostream_iterator 对象,
在写入过程中使用 delim 作为元素的分隔符。delim 是以空字符结束的字符数组

istream_iterator 的操作
it1 == it2
 
比较两个 istream_iterator 对象是否相等。迭代器读取的必须是相同的类型

it1 != it2
如果两个迭代器都是 end 值,则相等。
对于两个都不指向流结束位置的迭代器,如果它们使用同一个流输入构造,则它们也相等

*it
返回从流中读取的值

it->mem
相当于:(*it).mem。 返回从流中读取的对象的 mem 成员

++it
it++

通过使用元素类型提供的 >> 操作符,从输入流中读取下一个元素的值,使迭代器向前移动。
通常,
前缀版本,迭代器在流中向前移动,再返回加1 后的迭代器的引用。
后缀版本,迭代器在流中向前移动,再返回迭代器的原值。



热点排行