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