是否有一个标准实现for_each
,它调用元素和范围内的下一个?
以 range 为例{0, 1, 2, 3, 4, 5}
,我想f
用每个元素及其后继者调用一个函数:{f(0, 1), f(1, 2), f(2, 3), f(3, 4), f(4, 5)}
注意最后一个元素是如何被遗漏的,因为它没有后继者。
如果将其推广到与元素本身一起传递的 n 个后继者,那也很好。
到目前为止,我一直通过带有迭代器的手写循环来解决这个问题。但是,我想更多地沿着基于 C++11 范围的路线进行或std::for_each
避免样板代码。
例子
// today: handwritten loop
for(Range::iterator current = range.begin(); current != range.end(); ++current)
f(*current, *std::next(current));
// near future: wrapped version
for_each_pair(range.begin(), range.end(), f);
// slightly further future: generalized version
for_each_tuple<n>(range.begin(), range.end(), f);
附加问题
该函数的名称可以改进。对我来说for_each_pair
/tuple
听起来应该返回范围内所有大小为 n 的子集(这本身就是我想解决的另一个问题)。所以我想要一些更好的名字的建议,比如:
for_each_adjacent<n>