Как скопировать указанные c элементы из двухмерного вектора, используя copy_if - PullRequest
1 голос
/ 23 апреля 2020

Например, у меня есть двухмерный вектор и одномерный вектор, и я хочу скопировать первый элемент из каждой строки, используя std :: copy_if из библиотеки алгоритмов:

std::vector<std::vector<std::string>> names{ { "Allan", "Daniel", "Maria" }, {"John", "Louis", "Will"}, {"Bill", "Joe", "Nick"}};

Так что нам придется скопировать «Аллан», «Джон» и «Билл» в вектор назначения, который является dst

std::vector<std::string> dst;

Ответы [ 2 ]

6 голосов
/ 23 апреля 2020

Вы должны использовать std::transform вместо std::copy_if:

std::transform(names.begin(), names.end(), std::back_inserter(dst),
    [](const std::vector<std::string>& v) { return v[0]; });
0 голосов
/ 23 апреля 2020

Это не подходящий алгоритм для вашей задачи. std::copy_if копирует элементы диапазона , если этот элемент удовлетворяет некоторому предикату.

Может показаться, что вам нужно использовать std::copy, но это будет проблема, потому что copy просто означает, что каждый элемент копируется безоговорочно.

В вашем случае соответствующий алгоритм будет std::transform, так как вы хотите преобразовать каждый элемент диапазон в другой тип.

std::vector<std::string> dst;
std::transform(names.begin(), names.end(),
               std::back_inserter(dst), /* function */);

, где function будет лямбда, которая возвращает только первое string из vector<string>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...