gpt4 book ai didi

c++ - 累积 vector C++ 中的所有其他元素

转载 作者:行者123 更新时间:2023-11-27 23:36:46 28 4
gpt4 key购买 nike

我希望能够使用 accumulate 对 vector 中的每隔一对元素进行累加。我尝试了以下但没有成功,为非空、非零 vector 返回错误

return std::accumulate(vec.begin(), vec.end(), 0,
[&](int runningSum, int first, int second)
{return runningSum = runningSum + min(first, second);});

我现在意识到这可能不会得到对之间的最小值。例如,如果我有

vector<int> vec = {1,4,2,3} 

我想返回 0 + min(1, 4) + min(2, 3)。

另一方面,是否有任何网站包含这些 STL 内置函数的许多示例?我在网上找到的例子很少。我真的很想看到积累的力量,并适应它。

最佳答案

std::accumulate() 不允许您使用具有 3 个参数的谓词,只有 2 个参数 - 当前运行总和以及要添加到该总和的当前元素。为每个单独的元素调用谓词,并期望返回更新后的总和。

如果你想对值求和,你可以尝试这样的事情:

vector<int> vec = {1,4,2,3};
...
int *first = nullptr;
return std::accumulate(vec.begin(), vec.end(), 0,
[&](int runningSum, int &value) {
if (first) {
runningSum += std::min(*first, value);
first = nullptr;
} else {
first = &value;
}
return runningSum;
}
);

更好的解决方案是简单地更改您的 vector拿着一对int s(如 std::pair<int, int> )作为其元素类型(或至少将 vector int s 复制到第二个 vector 对),然后您可以按原样累积对:

vector<pair<int,int>> vec = {{1,4},{2,3}};
...
return std::accumulate(vec.begin(), vec.end(), 0,
[](int runningSum, const pair<int, int> &p) {
return runningSum + std::min(p.first, p.second);
}
);

关于c++ - 累积 vector C++ 中的所有其他元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58636597/

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