如何从 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&lt;cart_point_2d&gt;?我想知道除了明显的 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++ 中另一个向量的子元素创建一个向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?

如何在 C++ 中访问向量中的子实例

c ++创建对相同数据进行操作的子向量

如何清除向量中的所有元素,除了C++中向量中的最后一个元素

C++ 将元素从一个向量移动到另一个向量

从函数C++返回3个元素[重复]