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

C++ 在std::list中就地创建自定义类型对象,c++,stl,std,C++,Stl,Std,假设我有一个结构 struct someStruct { int a; customType b; }; 以及someStruct实例的std::列表 std::list<someStruct> aList; 有没有一种更通用的方法,这样我就不需要创建对象了 很抱歉首先使用数组作为示例 由于原始问题已更改而编辑: 既然这是显式的C++,那么这样做的唯一方法就是为Strut提供一个构造函数。p> struct someStruct { someStruct(in

假设我有一个结构

struct someStruct
{
    int a;
    customType b;
};
以及someStruct实例的std::列表

std::list<someStruct> aList;
有没有一种更通用的方法,这样我就不需要创建对象了

很抱歉首先使用数组作为示例

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

既然这是显式的C++,那么这样做的唯一方法就是为Strut提供一个构造函数。p>

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++,那么这样做的唯一方法就是为Strut提供一个构造函数。p>

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++11中的密切相关

anArray[0] = {123, 456};
或者更详细地说:

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

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

someStruct anArray[10] = {{1, 2}, {3, 4}, /*...*/};
在C++11中,您可以

anArray[0] = {123, 456};
或者更详细地说:

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

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

someStruct anArray[10] = {{1, 2}, {3, 4}, /*...*/};
在C语言中,可以使用以下语法:

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

struct someStruct ss[] = {
    {5, 6}
,   {6, 7}
,   {7, 8}
};
在C语言中,可以使用以下语法:

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

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

a数组[0].a=4;数组[0]。b=6;//是的,偏离了航线!我在考虑使用自定义数据类型的结构,C++默认情况下不知道如何构造,但我意识到只要我提供构造函数,C++就知道如何处理它。我应该删除这个问题吗?值得注意的是,当你在C++中创建一个数组时,每个元素都会调用默认构造函数。因此,您不能创建没有默认构造函数的类型的数组。@zenith是的,您可以。@zenith anArray[0]。a=4;数组[0]。b=6;//是的,偏离了航线!我在考虑使用自定义数据类型的结构,C++默认情况下不知道如何构造,但我意识到只要我提供构造函数,C++就知道如何处理它。我应该删除这个问题吗?值得注意的是,当你在C++中创建一个数组时,每个元素都会调用默认构造函数。因此,您不能创建没有默认构造函数的类型的数组。@zenith是的,您可以。@zenith