C++ 在向量向量上循环并附加到新向量

C++ 在向量向量上循环并附加到新向量,c++,stl,C++,Stl,我想在vect上循环,对每个元素调用一个函数,在两个结果之间执行一个操作,并将其附加到一个新的向量。 有更好的方法吗 std::vector<int> vect = {{1,2},{3,4}}; std::vector<double> out(vect.size()); for (int i = 0; i < vect.size(); i++){ double v = somefunction(vect[i][0]) - somefunction(ve

我想在vect上循环,对每个元素调用一个函数,在两个结果之间执行一个操作,并将其附加到一个新的向量。 有更好的方法吗

std::vector<int> vect = {{1,2},{3,4}};
std::vector<double> out(vect.size());
for (int i = 0; i < vect.size(); i++){
       double v = somefunction(vect[i][0]) - somefunction(vect[i][1]);
       out.push_back(v);
    }
std::vector vect={{1,2},{3,4};
std::vector out(vect.size());
对于(int i=0;i
假设您的
vect
看起来是一个
std::vector
,您可以简单地编写:

std::vector <double> out;
for(size_t i = 0; i < vect.size(); ++i)
{
    out.push_back(someFunction(vect[i][0]) - someFunction(vect[i][1]));
}
并将上一个循环替换为:

std::vector <double> out;
for(size_t i = 0; i < vect.size(); ++i)
{
    out.push_back(someFunction(vect[i].first) - someFunction(vect[i].second));
}
std::向量输出;
对于(大小i=0;i

std::向量输出;
用于(自动和验证:矢量)
{
向外推(someFunction(v.first)-someFunction(v.second));
}

这就是
std::transform
可以用于的功能

#include <algorithm>

std::vector<double> out(vect.size());

std::transform(vect.cbegin(), vect.cend(), out.begin(), [](const auto& inner)
    { return somefunction(inner.front()) - somefunction(inner.back()); });
#包括
std::vector out(vect.size());
std::transform(vect.cbegin()、vect.cend()、out.begin()、[](常量自动和内部)
{返回somefunction(inner.front())-somefunction(inner.back());};

这假设
vect
是一个大小为
2
的容器,其中包含
front()
back()
成员函数,这些函数完成了人们期望它们完成的任务。

vect
的类型是什么?您需要保留它的内容,还是可以从中移动?最好发布一个完整的函数以及相关的标题,以便更准确地显示您想要的内容。une210没有Pushback这样的成员函数哦,我不知道
std::transform
。因为我认为你的答案比我的好得多(而且简洁)。对于默认构造(不是
double
)代价高昂的类型,最好创建一个空的
out
,保留容量,并传递一个
std::back\u inserter
作为转换的输出迭代器。但这个答案对于
double
元素很好。@TobySpeight说得不错。除了
double
s的默认构造很便宜之外,我还想保持接近问题中的原始代码。嗨!即使vect有两个以上的元素,这难道不起作用吗?@acraig5075 Hm,OP有
vect[i][0]
vect[i][1]
,我用
front()
back()
替换了它们。如果大小不是2,那么我的回答会导致与问题中的代码片段不同的行为,否?
std::vector <double> out;
for(size_t i = 0; i < vect.size(); ++i)
{
    out.push_back(someFunction(vect[i].first) - someFunction(vect[i].second));
}
std::vector <double> out;
for(auto & v : vect)
{
    out.push_back(someFunction(v.first) - someFunction(v.second));
}
#include <algorithm>

std::vector<double> out(vect.size());

std::transform(vect.cbegin(), vect.cend(), out.begin(), [](const auto& inner)
    { return somefunction(inner.front()) - somefunction(inner.back()); });