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

时间:2015-03-21 01:28:57

标签: c++ stl std

假设我有一个结构

struct someStruct
{
    int a;
    customType b;
};

std::listsomeStruct个实例

std::list<someStruct> aList;

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

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

是否有更通用的方法来执行此操作,以便我不需要创建对象?

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

3 个答案:

答案 0 :(得分:3)

在C ++ 11中,你可以做到

anArray[0] = {123, 456};

或者更详细地说:

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

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

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

答案 1 :(得分:2)

编辑,因为原始问题已更改:

由于现在这是显式的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

密切相关

答案 2 :(得分:2)

在C语言中,您可以使用designated initializer语法:

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

Demo.

此语法在C ++中不可用,因此您必须坚持基于位置的旧式初始化:

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