Как создать вектор из подэлементов другого вектора в C ++? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть такой код:

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>? Я хотел бы знать, есть ли какой-нибудь выход, кроме очевидного для l oop.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вы можете использовать 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;
    }
}
0 голосов
/ 07 мая 2020

for_each тоже можно использовать:

std:vector<cart_point_2d> result;

std::for_each(trajectory.begin(), trajectory.end(), 
    [&result](const auto& item) { result.push_back(item.point); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...