【问题标题】:Good way to initialise a vector of vectors of struct (each with an initial value)?初始化结构向量向量的好方法(每个都有一个初始值)?
【发布时间】:2013-06-08 21:49:28
【问题描述】:

我提到了我之前提出的一个问题,我问的是用空值初始化struct Vanish 向量的最佳方法:

Is using assign() a good way to initialise my C++ vector of structs?

我接受了答案:

BigClass::BigClass()
: tovanish(MAX_VANISH)
{

}

我现在的问题是,如果我想初始化一个 struct Vanish 的向量,作为我班级的成员 (BigClass),但这次用值 {3,3) 初始化每个 Vanish }。我有:

std::vector<std::vector<Vanish>> vanish_vectors;

在我的构造函数中我尝试过:

BigClass::BigClass():
    vanish_vectors(NUM_COLUMNS, (NUM_ROWS, (3,3)))
  {

  }

旨在创建 NUM_COLUMNS 个向量,并且在每个向量中将 NUM_ROWS 的 struct Vanish 初始化为值 {3, 3}。

使用调试器,我发现这确实创建了 NUM_COLUMNS 个向量。 但是,这些向量中的每一个都包含 3 个Vanish 结构,全部归零。

用值初始化那些 Vanish 结构的最佳方法是什么?

【问题讨论】:

    标签: c++ stdvector


    【解决方案1】:

    除非这是我不熟悉的语法,否则您尝试的实际上是使用逗号运算符,因此(NUM_COLUMNS, (NUM_ROWS, (3,3))) 变为(NUM_COLUMNS,3),它传递3 作为构造向量的值from(这反过来会用 int 调用向量的构造函数,为您提供 3 个默认初始化元素的向量)

    我认为你需要做的是:

    // C++11
    vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, {3,3}))
    
    // or for older C++ (you will also need to give Vanish a constructor)
    vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, Vanish(3, 3)))
    
    // or (as noted in the comments) to keep Vanish as POD in pre-C++11:
    vanish_vectors(NUM_COLUMNS, std::vector<Vanish>(NUM_ROWS, makeVanish(3, 3)))
    // with a function like this:
    Vanish makeVanish( int a, int b ) {
        Vanish thing;
        thing.a = a;
        thing.b = b;
        return thing;
    }
    

    它发送一个向量来初始化值,并且该向量包含一个结构体,其值为 3、3 以初始化 值。

    【讨论】:

    • 我的编译器不接受 3,3 周围的花括号。 “错误需要一个表达式”。
    • 这可能意味着您使用的是 C++11 之前的编译器,或者您没有启用 C++11 扩展。你应该给你的结构一个构造函数并调用它。我会在答案中添加注释。
    • @BeeBand 或者,编写一个 Vanish makeVanish(int, int); 函数来为您构造对象。也就是说,如果您希望您的结构成为 POD。否则使用构造函数。
    • @juan 好的,它看起来像:Vanish* v = new Vanish; v-&gt;firstfield = val; v-&gt;secondfield = val; return v; 吗?
    • @BeeBand 不!没有指针,没有new。只是 `vanish_vectors(NUM_COLUMNS, std::vector(NUM_ROWS, makeVanish(3, 3)));
    猜你喜欢
    • 2014-07-06
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多