初始化用户定义数据类型向量的简明方法

时间:2014-06-05 00:08:18

标签: c++

好的,所以我有一个结构(下面),我想将其所有成员初始化为false。我还想要一个结构为stalls的大小为barn的向量。换句话说,我想要{vector}作为容器的stalls对象结构barn副本,并初始化其成员。

struct barn {
    bool cow, board;
};

我一直在使用以下代码(可怕的方式):

vector<barn> barn_info;
for (int i = 0; i != stalls; ++i) {
    barn x; x.cow = false; x.board = false;
    barn_info.push_back(x);
}

3 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点,其中大部分涉及C ++ 11:

如果(并且仅当)您使用的是C ++ 11,则可以

struct barn {
  bool cow = false;
  bool board = false;
}

vector<barn> barn_info(stalls);

请注意,这不能与在构造函数上初始化它们一起使用。有关详细信息,请参阅this link

如果你不想拥有结构的构造函数而你没有像上面那样初始化它的字段,你可以这样:

vector<barn> barn_info(stalls, {false, false})

{}部分也在上面的链接中描述。您可以看到更多初始化std::vector here的方法。

您可以使用.assign()的{​​{1}}方法,如下所示:

std::vector

即使不使用C ++ 11也可以。如果使用C ++ 11,您可以将它缩短为:

std::vector<barn> barn_info;
barn b; b.cow = false; b.board = false;
barn_info.assign(stalls, b); // assign 'stalls' positions the 'b' value

答案 1 :(得分:1)

struct barn {
    bool cow, board;

    barn():cow(false),board(false){}
};

vector<barn> barn_info(n);

答案 2 :(得分:1)

直接使用矢量构造函数:

barn b {false, false; };

std::vector<barn> barn_info (stalls, b);