如何使用copy_if从二维矢量中复制特定项目

How to copy specific items from a 2d vector using copy_if

本文关键字:二维 复制 项目 copy 何使用 if      更新时间:2024-03-28

例如,我有一个2d向量和一个1d向量,我想使用std::copy_if从算法库复制每行的第一项

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

因此,我们必须将"Allan"、"John"answers"Bill"复制到目标向量dst 中

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

您应该使用std::transform而不是std::copy_if:

std::transform(names.begin(), names.end(), std::back_inserter(dst),
[](const std::vector<std::string>& v) { return v[0]; });

这不是适合您任务的算法。std::copy_if复制一个范围的元素,如果该元素满足某个谓词。

这似乎需要使用std::copy,但这将是一个问题,因为copy的意思只是无条件地复制每个元素。

在您的情况下,合适的算法是std::transform,因为您希望将范围中的每个元素转换为不同的类型。

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

其中CCD_ 6将是仅从CCD_ 8返回第一个CCD_。