我编写了一个函数,该函数首先添加两个 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::transformstd::max_elementstd::plus<double>的功能。一切都按预期进行。我在俯视什么?

最佳答案

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

std::vector<double> vsum;

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



但是该范围尚未初始化-因此您将要写入未初始化的内存!您需要执行以下任一操作:
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;
}

08-26 16:58