我在这里写了一个答案:https://stackoverflow.com/a/44481507/2642059,它使用
二元函数对象的签名必须像这样:
accumulate
。二元函数对象的签名必须像这样:
Ret op(const auto& a, const auto& b)
,但是:
对于二元函数对象的要求是:签名不需要有
const &
当被累加的对象本身是一个容器时,我对函数对象的要求不太清楚。例如,是否允许像这样做?不能使任何迭代器失效,包括结束迭代器,也不能修改涉及到的任何元素
const auto range = { 0, 1, 2, 3 };
const auto Ret = accumulate(cbegin(range), cend(range), vector<int>(), [](auto& a, const auto& b){
a.push_back(b);
return a;
});
是的,我认识到这只是一份复制,我不是在寻求更好的解决方案,而是询问这个解决方案的有效性。
call_once
和once_flag
的帖子。这真是太好了,我以前从来没有听说过。现在我感觉需要把你所有的回答都仔细读一遍! - Jonathan Meeconst
容器,而其他方法则不能。我猜这就是Arne Vogel所提到的建议背后的真正动机。 - Jonathan Mee