如何从 C++ 中另一个向量的子元素创建一个向量?
Posted
技术标签:
【中文标题】如何从 C++ 中另一个向量的子元素创建一个向量?【英文标题】:How to create a vector from sub-elements of another vector in C++? 【发布时间】:2020-05-07 06:49:38 【问题描述】:我有这样的代码:
struct cart_point_2d
double x; double y;
struct curve_point_2d
double arc;
double kappa;
cart_point_2d;
std::vector<curve_point_2d> trajectory;
trajectory
初始化后,我需要创建另一个本地向量,该向量与trajectory
的长度相同,但应该只包含来自向量每个元素的cart_point_2d
。如何创建std::vector<cart_point_2d>
?我想知道除了明显的 for 循环之外是否还有其他方法。
【问题讨论】:
curve_point_2d
有语法错误。你可能想要std::transform
明显的 for 循环没有错。
【参考方案1】:
您可以使用算法中的std::transform。 例如:
struct Point
double x;
double y;
;
struct Object
double val1;
double val2;
Point point;
;
int main()
std::vector<Object> objects = 0.0, 0.1, 1.0, 1.1,
0.0, 0.2, 1.0, 1.2,
0.0, 0.3, 1.0, 1.3;
std::vector<Point> points;
std::transform(objects.begin(), objects.end(), std::back_inserter(points),
[](const auto& object) return object.point;);
for (const auto& p : points)
std::cout << p.x << ':' << p.y << std::endl;
【讨论】:
【参考方案2】:for_each也可以用:
std:vector<cart_point_2d> result;
std::for_each(trajectory.begin(), trajectory.end(),
[&result](const auto& item) result.push_back(item.point); );
【讨论】:
以上是关于如何从 C++ 中另一个向量的子元素创建一个向量?的主要内容,如果未能解决你的问题,请参考以下文章