【问题标题】:How to create a vector from sub-elements of another vector in C++?如何从 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 循环没有错。

标签: c++ vector stl


【解决方案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); });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多