C++11,仅将一个字段复制到向量中

markt1964

假设我在 C++ 中有以下结构

struct Foo {
   double a;
   int b;
};

并说我有一个函数的参数,声明如下:

const std::initializer_list<Foo> &args;

有没有一种简洁的方法来从元素中提取一个字段args,例如,只是一个包含b原始args列表中每个字段的 std::vector

当然,我知道我可以通过明确地将它写成一个循环来做到这一点:

std::vector<int> result;
for(auto &x:args) {
    result.push_back(x.b);
}

...但鉴于我可以在一行 C++ 中将任何类型的整个 initializer_list 复制到类似类型的向量,只需使用 std::copy 和 std::back_inserter 之类的函数,我想知道是否还有更多使用可能已经存在的 stl 或 C++11 工具也可以优雅地做到这一点。

pmaxim98

您可以通过以下方式使用std::transform元素并将其添加到向量中std::back_inserter

std::transform(std::begin(args), std::end(args), std::back_inserter(result), 
[] (const Foo & foo) { return foo.b; });

如果您发现 lambda 过于冗长,则可以std::mem_fn改用(归功于@StoryTeller)。

std::transform(std::begin(args), std::end(args), std::back_inserter(result), std::mem_fn(&Foo::b));

但话又说回来,你的方法不一定是坏的,因为它非常易读并且可以很好地完成工作(可能有一些性能问题)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅将向量中的字母复制到C ++中的另一个向量

MongoDB C#驱动程序-在插入时将ID复制到另一个字段

C - 将一个字符复制到另一个字符

C-将半字节从一个字节复制到另一个字节以产生位移4

将字节数组复制到C#中的另一个字节数组

如何使用指针而不使用字符串库将字符数组复制到'c'中的另一个字符数组

将字节从字节数组复制到C#中另一个字节数组的特定位置

没有strcpy将字符指针复制到C中的另一个字符指针

通过转换将C ++向量复制到另一个向量的最佳方法

将const uint *的值复制到C ++中的另一个变量

在C编程中将一个字符串变量复制到另一个字符串变量时遇到问题

在C中进行字符串解析。将字符串的一部分复制到另一个字符串

C ++如何在结构向量的一个字段上创建迭代器

C ++:将一个对象复制到构造函数中的另一个对象

在C中以相反的顺序将字节从一个文件复制到另一个文件

C ++ 11 Segmentation Fault尝试将数组(<algorithm>)动态复制到向量中

如何将数据从一个字段复制到SQL Server中不同行中的另一个字段

如何使用OpenCV在C ++中将向量的向量结构复制到另一个向量

将一个链表复制到另一个链表 C++

fscanf仅读取第一个字段C

使用JavaScript中的“ id”将文本从一个字段复制到另一个字段

在 C 中创建一个字符串后,我试图将其内容复制到该字符串的文件在我实际告诉它之前这样做

如何将ElasticSearch字段复制到另一个字段

自动将字段文本复制到另一个字段

将动态字段值复制到另一个字段

将列表的一部分复制到C ++中的向量

将所有数组元素复制到C中的另一个数组中

将字符串数组复制到C中的另一个数组中

如何将数组中的值复制到另一个字段然后弹出它?