在std::list中就地创建自定义类型对象

In place creation of custom type object in std::list

本文关键字:创建 自定义 类型 对象 std list      更新时间:2023-10-16

假设我有一个结构

struct someStruct
{
    int a;
    customType b;
};

和CCD_ 2实例中的CCD_

std::list<someStruct> aList;

将项目存储到该列表的一种方法是创建someStruct,将我想要的值存储到该实例,然后存储列表中类似的实例

someStruct obj;
obj.a = 4;
obj.b = customType::value_type;
aList.push_back(obj);

有没有一种更通用的方法可以做到这一点,这样我就不需要创建对象了?

很抱歉一开始使用数组作为示例!

在C++11中,您可以执行

anArray[0] = {123, 456};

或者更详细地说:

anArray[0] = someStruct{123, 456};

在任何版本的C++中,您都可以执行聚合数组初始化:

someStruct anArray[10] = {{1, 2}, {3, 4}, /*...*/};

由于原始问题更改而编辑:

由于现在这是显式C++,所以实现这一点的一种线性方法是为结构提供构造函数。

struct someStruct {
  someStruct(int new_a, customType new_b) : a(new_a), b(new_b) {}
  int a;
  customType b;
};
...
aList.push_back(someStruct(4, customType::value_type));

这与将结构推入向量密切相关

在C中,您可以使用指定的初始值设定项语法:

struct someStruct ss[] = {
    {.a=5, .b=6}
,   {.a=6, .b=7}
,   {.a=7, .b=8}
};

演示。

这个语法在C++中不可用,所以你必须坚持基于位置的老式初始化:

struct someStruct ss[] = {
    {5, 6}
,   {6, 7}
,   {7, 8}
};