我们被教导创建函数对象以使用算法。
有一些算法调用operator()
,例如:
- for_each
- find_if
- remove_if
- 最大元素
- count_if
这些函数对象通常应该继承自unary_function
or binary_function
,以表现得像函数、谓词等。
但是书籍通常不会展示创建示例OutputIterators
:
例如,要遍历函数的输出
std::set_intersection()
,我必须提供一个目标容器,然后遍历结果:
std::vector<int> tmp_dest;
std::set_difference (
src1.begin(), src1.end(),
src2.begin(), src2.end(),
std::back_inserter(tmp_dest));
std::for_each( tmp_dest.begin(), tmp_dest.end(), do_something );
int res = std::accumulate( tmp_dest.begin(), tmp_dest.end(), 0 );
但认为有时使用每个算法的值而不先存储它们会更有效,例如:
std::set_difference (
src1.begin(), src1.end(),
src2.begin(), src2.end(),
do_something );
Accumulator accumulate(0); // inherits from std::insert_iterator ?
std::set_difference (
src1.begin(), src1.end(),
src2.begin(), src2.end(),
accumulate );
- 我们通常应该创建像这样的Accumulator类吗?
- 它的设计应该是什么样的?
- 它应该继承什么?
累加器可以继承自
insert_iterator
,但它并不是真正的迭代器(例如,它没有实现operator++()
)
被广泛接受的做法是什么?