gpt4 book ai didi

c++ - 返回(两个)按​​元素添加的 vector 的最大值

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:37 25 4
gpt4 key购买 nike

我写了一个函数,首先添加两个 vector ( v1b1 添加到 vsum )然后返回 vsum 的最大值.这是我尝试运行的,由于某种原因它不起作用:

double MaximumOfSummedVectors(std::vector<double> &v1,std::vector<double> &v2) {
std::vector<double> vsum;
std::transform(v1.begin(),v1.end(),v2.begin(),vsum.begin(),std::plus<double>());
return *std::max_element(std::begin(vsum),std::end(vsum));
}

我已经测试了 std::transform 的两个功能, std::max_elementstd::plus<double>在我的主要环境中。一切都按预期进行。我忽略了什么?

最佳答案

您忽略了两件事:第一是未定义的行为!

std::vector<double> vsum;

vsum 此时的大小为零。但是 transform 只会写入您传入的迭代器

Effects: Assigns through every iterator i in the range [result,result + (last1 - first1)) a new corresponding value equal to ...

但该范围未初始化 - 因此您将写入未初始化的内存!您需要执行以下任一操作:

vsum.resize(v1.size());

或者传递一个插入器:

std::transform(v1.begin(),v1.end(),v2.begin(),
std::back_inserter(vsum),
std::plus<double>());

第二件事是,您无缘无故地构建了这个全新的 vector :

double MaximumOfSummedVectors(std::vector<double> &v1,std::vector<double> &v2) 
{
auto i1 = v1.begin(), i2 = v2.begin();
double m = *i1++ + *i2++;
for (; i1 != v1.end(); ++i1, ++i2) {
m = std::max(m, *i1 + *i2);
}
return m;
}

关于c++ - 返回(两个)按​​元素添加的 vector 的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704823/

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