簡體   English   中英

遍歷向量的向量並附加到新向量

[英]Looping over vector of vectors and appending to a new vector

我想遍歷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::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()); });

假設vect是一個大小為2的容器,具有front()back()成員函數,它們將執行它們期望的操作。

假設您的vect std::vector <std::vector <double>> ,則可以簡單地編寫:

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(auto & v : vect)
{
    out.push_back(someFunction(v[0]) - someFunction(v[1]));
}

您不必像初始化out進行初始化out因為push_back()將在構造中已經添加的內容的末尾添加另一個元素。


請注意,如果vect僅包含大小為2的向量,則可以改用std::pair ,例如:

std::vector<std::pair<double, double>> vect;

並用以下內容替換之前的循環:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM