循环向量的向量并附加到新向量
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
因为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));
}
相关文章:
- 计算排序向量的向量中唯一值的计数
- C++将向量的向量拆分为向量的N个子向量
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 循环向量的向量并附加到新向量
- C 矢量元素擦除与新向量创建
- 仅使用重复项创建他人的新向量
- 如何将文本文件的每一行分配给新向量
- C++数组选择平方数并创建新向量
- 如何将映射的内容从一个类复制到另一个类的新向量中
- 如何从字符串向量 c++ 而不是新向量过滤
- 在C++中检查向量项并添加到新向量中
- 将旧向量设置为等于新向量
- c ++我可以在我的代码中将这样的向量新到哈希图中吗?
- 如何使用 STL 的 copy() 从现有向量创建新向量?
- 从向量中移除元素,并将该元素添加到新向量c++中
- 如何在向量的向量开头添加新行
- 从类实例的向量中提取类成员(作为新向量)
- 将具有唯一指针的向量复制到新向量中
- c++计算一个新向量,该向量与现有向量有delta
- 如何在 c++ 中从现有 2D 向量创建具有特定列的新向量