【发布时间】:2014-11-07 16:16:32
【问题描述】:
有些情况
x += y;
比
效率高很多x = x + y;
(假设x 和y 属于某些具有复杂重载运算符的类类型)。现在我当然可以折叠
X x;
BOOST_FOREACH(Y const &y, collection)
x += y;
(我被困在使用旧编译器的平台上)但不知何故我更喜欢std::accumulate。是否可以(或其他算法,但不是 for_each)改为使用+=?
std::accumulate 应该像这样调用运算符
sum = op(sum, *iter);
但是可以依赖它,也就是会
X x(std::accumulate(collection.begin(),
collection.end(),
X(),
std::mem_fun_ref(&X::operator+=)));
工作?
【问题讨论】:
-
std::for_each有什么问题? -
是的,您可以信赖它。你可以做一个非常丑陋的黑客。不要。
-
@Rapptz:它不再提供任何优于循环的优势,无论是代码长度还是抽象量。
-
你不能使用
std::accumulate,因为它要求不修改范围内的任何元素,而+=很明显会修改一个元素。 -
@BillLynch:不在范围内。
标签: c++ language-lawyer c++03 c++-standard-library