【读书笔记】C++泛型编程学习小结

泛型指针(Iterator)

指针作为算法中常用的工具,在泛型编程中进行了“泛型化”,使其可以针对不同容器展现相同行为,达到了十分便捷、通用的抽象效果。
取得iterator,可以借助标准容器的begin()及end()操作函数,前者返回指向第一个元素的iterator,后者指向最后一个元素。
iterator可以进行赋值(assign)、比较(compare)、递增(increment)、提领(dereference)操作。
用法案例:

  • 一个指向vector开头的泛型指针:vector<string>::iterator iter=svec.begin();
  • 一个指向vector结尾的常量泛型指针:vector<string>::const_iterator iter=vec.end();

泛型算法(Generic Algorithms)

使用泛型算法

头文件:#include <algorithm>
泛型算法与泛型指针配合使用:binary_search(vec.begin(), vec.end(), elem);

设计泛型算法

Function Object

function object可以消除泛型算法中“通过函数指针来调用函数”时需付出的额外代价。
使用预先定义的function object,需包含头文件:#include <functional>
使用案例:sort(vec.begin(), vec.end(), greater<int>);其中的greater<int>()会产生一个未命名的class template object,传给sort()。

Function Object Adapter

标准库提供了adapter(适配器)来完成function object的个性化使用。
binder adapter(绑定适配器)可以将function object的参数绑定至某特定值,使binary function object转化为unary function object。
negator可以对function object的真伪值取反。

Iterator Inserter

可以使用特定的赋值函数取代assignment运算符。
需包含头文件:#include <iterator>

iostream Iterator

此类泛型指针可以指向各类输入输出设备,结合泛型算法copy()使用,可以进行输入输出。
也需包含头文件:#include <iterator>