Преобразование вектора к вектору <A> - PullRequest
2 голосов
/ 08 марта 2020

Существует вектор std::unique_ptr<A>. Мне нужно передать эти данные в функцию, которая ожидает вектор A.

Я пытался использовать std::transform, например:

std::vector<std::unique_ptr<A>> a;

std::vector<A> aDirect;
std::transform(a.begin(), a.end(),
    std::back_inserter(aDirect),
    [](std::unique_ptr<A> element)-> A { return *element; });

, но, похоже, std::transform пытается скопировать элементы a в какой-то момент, чтобы это не сработало, не получается попытаться сослаться на удаленную функцию.

Конечно, я мог бы просто сделать это вручную с помощью для l oop, но мне было интересно, есть ли более элегантный способ сделать это.

1 Ответ

8 голосов
/ 08 марта 2020

измените лямбду на постоянную &

[](std::unique_ptr<A> const &element)-> A { return *element; });

, чтобы избежать копий из-за изменения резерва до правильного размера перед преобразованием.

std::vector<A> aDirect;
aDirect.reserve(a.size());
std::transform(a.begin(), a.end(),
               std::back_inserter(aDirect),
               [](std::unique_ptr<A> element) {
                   return *element;
               });
...