c++ - 复制 std::vector 但将 lambda 应用于每个元素

标签 c++ c++11 vector lambda

我有一个 std::vector X of std::vector of, say, double in C++.

我如何将 X 转换为 std::vector Y of int 使得 X[i].size() == Y[i] 对所有可接受的索引 i 成立?

std::vector< std::vector<int> > X;
...
/* What I want to do should look as follows */
std::vector<int> Y = std::copy_and_transform( X, lambda_to_get_size );

当然,这可以通过循环来实现,但在 C++11 中我们更愿意使用 lambda 表达式。我在 std::algorithm 中没有找到类似的东西。标准工具似乎只提供更改原始 vector 且不允许更改数据类型的就地转换。

最佳答案

您可以使用 std::transform :

std::vector<int> Y;
std::transform(X.cbegin(), X.cend(), std::back_inserter(Y), [](const std::vector<int>& value) {
    return value.size();
});

关于c++ - 复制 std::vector 但将 lambda 应用于每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44215219/

相关文章:

c++ - 使用模板相关类型在 C++ 中重载运算符 "<<"

c++ - 推力::device_vector的结构抛出总线错误

c++ - 有条件地启用一个子类型(类似于enable_if来启用功能)

c++ - 如何解释 Variadic 模板中的继承?

c++ - 在 C++ 中将值插入多维 vector

c++ - 为什么 std::num_put 通过非 const 引用获取 ios_base 参数?

c++ - ifstream读入二维数组时出现奇怪的字符

c++ - 从 vector 中删除项目,而在 C++11 范围 'for' 循环中?

matrix - 深度学习模型中不同数量节点的直觉

c++ - 将 vector<fooType> foo[num] 移植到 Windows(无 C99)