gpt4 book ai didi

c++ - std::accumulate BinaryOperator 副作用

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:50 24 4
gpt4 key购买 nike

std::accumulate cppreference.com 上的文档指出:

op must not invalidate any iterators, including the end iterators, or modify any elements of the range involved (since c++11)

稍后,它显示了一个可能的实现,我在这里报告:

template<class InputIt, class T, class BinaryOperation>
T accumulate(InputIt first, InputIt last, T init,
BinaryOperation op)
{
for (; first != last; ++first) {
init = op(init, *first);
}
return init;
}

假设 std::accumulate 的这种实现,op 如何“使某些迭代器无效”或“修改范围的元素”?

最佳答案

您可以定义一个 lambda 来修改范围内的元素和/或修改范围本身。例如,使用以下 lambda 将违反 std::accumulate 的先决条件:

std::vector<int> v{0,1,2,3,4};
auto illegal_op = [&v](int init, int val) {
v.back() *= 2; // modifying elements in the range
v.push_back(42); // invalidating iterators in the range
return init + val;
};
std::accumulate(v.begin(), v.end(), 0, illegal_op);

关于c++ - std::accumulate BinaryOperator 副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38643852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com