在 std::list 中就地创建自定义类型对象
In place creation of custom type object in std::list
假设我有一个结构
struct someStruct
{
int a;
customType b;
};
和 std::list
个 someStruct
个实例
std::list<someStruct> aList;
将项目存储到该列表的一种方法是创建一个实例
someStruct
,存储我想要的值到那个实例然后存储
列表中的实例就是这样
someStruct obj;
obj.a = 4;
obj.b = customType::value_type;
aList.push_back(obj);
是否有更通用的方法来执行此操作,这样我就不需要创建对象?
抱歉一开始使用数组作为示例!
已编辑,因为原始问题已更改:
由于这现在是显式的 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));
这与push_back() a struct into a vector
密切相关
在 C++11 中你可以做到
anArray[0] = {123, 456};
或更详细地说:
anArray[0] = someStruct{123, 456};
并且在任何版本的 C++ 中,您都可以执行聚合数组初始化:
someStruct anArray[10] = {{1, 2}, {3, 4}, /*...*/};
在 C 中,您可以使用 designated initializer 语法:
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}
};
假设我有一个结构
struct someStruct
{
int a;
customType b;
};
和 std::list
个 someStruct
个实例
std::list<someStruct> aList;
将项目存储到该列表的一种方法是创建一个实例
someStruct
,存储我想要的值到那个实例然后存储
列表中的实例就是这样
someStruct obj;
obj.a = 4;
obj.b = customType::value_type;
aList.push_back(obj);
是否有更通用的方法来执行此操作,这样我就不需要创建对象?
抱歉一开始使用数组作为示例!
已编辑,因为原始问题已更改:
由于这现在是显式的 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));
这与push_back() a struct into a vector
密切相关在 C++11 中你可以做到
anArray[0] = {123, 456};
或更详细地说:
anArray[0] = someStruct{123, 456};
并且在任何版本的 C++ 中,您都可以执行聚合数组初始化:
someStruct anArray[10] = {{1, 2}, {3, 4}, /*...*/};
在 C 中,您可以使用 designated initializer 语法:
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}
};