C++ 如何使用copy_if从二维向量复制特定项

C++ 如何使用copy_if从二维向量复制特定项,c++,c++11,vector,C++,C++11,Vector,例如,我有一个2d向量和一个1d向量,我想使用std::copy_(如果)从算法库中复制每行的第一项: std::vector<std::vector<std::string>> names{ { "Allan", "Daniel", "Maria" }, {"John", "Louis", "Will"}, {"Bill", "Joe", "Nick"}}; 向量名{{“艾伦”、“丹尼尔”、“玛丽亚”}、{“约翰”、“路易斯”、“威尔”}、{“比尔”、“乔”、“尼克”

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

std::vector<std::vector<std::string>> names{ { "Allan", "Daniel", "Maria" }, {"John", "Louis", "Will"}, {"Bill", "Joe", "Nick"}};
向量名{{“艾伦”、“丹尼尔”、“玛丽亚”}、{“约翰”、“路易斯”、“威尔”}、{“比尔”、“乔”、“尼克”}; 因此,我们必须将“Allan”、“John”和“Bill”复制到目标向量dst中

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

如果出现以下情况,则应使用
std::transform
而不是
std::copy\u:

std::transform(names.begin()、names.end()、std::back_插入器(dst),
[](const std::vector&v){return v[0];});

如果出现以下情况,则应使用
std::transform
而不是
std::copy\u:

std::transform(names.begin()、names.end()、std::back_插入器(dst),
[](const std::vector&v){return v[0];});

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

这似乎需要使用,但这将是一个问题,因为复制只是意味着无条件地复制每个元素

在您的例子中,适当的算法是,因为您希望将范围的每个元素转换为不同的类型

std::vector<std::string> dst;
std::transform(names.begin(), names.end(),
               std::back_inserter(dst), /* function */);
std::向量dst;
std::transform(names.begin(),names.end(),
标准:背向插入器(dst),/*函数*/);

其中,
函数
将是一个lambda,它只从
向量
返回第一个
字符串

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

这似乎需要使用,但这将是一个问题,因为复制只是意味着无条件地复制每个元素

在您的例子中,适当的算法是,因为您希望将范围的每个元素转换为不同的类型

std::vector<std::string> dst;
std::transform(names.begin(), names.end(),
               std::back_inserter(dst), /* function */);
std::向量dst;
std::transform(names.begin(),names.end(),
标准:背向插入器(dst),/*函数*/);

其中,
函数
将是一个lambda,它只从
向量
返回第一个
字符串

如果
,为什么要复制?这是一个很难的要求吗?我不明白如果在这里使用较少的代码是一个很好的实践。使用算法是一个很好的实践,但我想问,为什么特别是
copy\u if
?我想也许你有理由这样问,如果不是的话,这只是你的第一个猜测,也是好的,我只是好奇有时这里的代码被简化到了一个很难看到实际动机的程度,因此,有可能你确实需要使用
copy\u if
,只有在这里的代码中,它不再明显。没关系,好像你得到了你想要的东西为什么
复制\u if
?这是一个很难的要求吗?我不明白如果在这里使用较少的代码是一个很好的实践。使用算法是一个很好的实践,但我想问,为什么特别是
copy\u if
?我想也许你有理由这样问,如果不是的话,这只是你的第一个猜测,也是好的,我只是好奇有时这里的代码被简化到了一个很难看到实际动机的程度,因此,有可能你确实需要使用
copy\u if
,只有在这里的代码中,它不再明显。没关系,看起来你得到了你想要的东西,因为目标和源
向量的类型不同。你需要从一个转变成另一个。非常感谢。因为目标和源
向量
的类型不同。你需要从一个转变成另一个。非常感谢。