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

C++ 初始化用户定义数据类型向量的简明方法,c++,C++,好的,我有一个结构(如下),我想将它的所有成员初始化为false。我还需要一个大小为stalls的向量,该向量的结构是barn。换句话说,我希望使用向量作为容器,暂停对象结构barn的副本,并初始化其成员 struct barn { bool cow, board; }; 我一直在使用以下代码来实现这一点(糟糕的做法): 矢量仓库信息; for(int i=0;i!=暂停;++i){ 谷仓x;x.cow=false;x.board=false; 谷仓信息。推回(x); } struct

好的,我有一个结构(如下),我想将它的所有成员初始化为false。我还需要一个大小为
stalls
的向量,该向量的结构是
barn
。换句话说,我希望使用向量作为容器,暂停对象结构
barn
的副本,并初始化其成员

struct barn {
    bool cow, board;
};
我一直在使用以下代码来实现这一点(糟糕的做法):

矢量仓库信息;
for(int i=0;i!=暂停;++i){
谷仓x;x.cow=false;x.board=false;
谷仓信息。推回(x);
}
struct barn{
牛,板;
谷仓():牛(假),板(假){}
};
矢量谷仓信息(n);
struct barn{
牛,板;
谷仓():牛(假),板(假){}
};
矢量谷仓信息(n);

直接使用向量构造函数:

barn b {false, false; };

std::vector<barn> barn_info (stalls, b);
barnb{false,false;};
std::矢量谷仓信息(货摊,b);

直接使用向量构造函数:

barn b {false, false; };

std::vector<barn> barn_info (stalls, b);
barnb{false,false;};
std::矢量谷仓信息(货摊,b);

实现这一点的方法有多种,其中大多数涉及C++11:

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

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

vector<barn> barn_info(stalls);
即使不使用C++11,也可以这样做。如果使用C++11,可以将其缩短为:

barn_info.assign(stalls, {false, false});

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

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

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

vector<barn> barn_info(stalls);
即使不使用C++11,也可以这样做。如果使用C++11,可以将其缩短为:

barn_info.assign(stalls, {false, false});

这将在没有构造函数的情况下工作。向量值初始化它们。不过,我不会抱怨有这样一个构造函数。那是一个构造函数吗?我对构造器了解不多。你能解释一下
{}
的作用吗?@IshaanSingh barn()是一个构造函数,{}是它的主体,但现在它是empty@chris你所说的“向量值初始化它们”是什么意思?@Andres非常感谢:-)如果没有构造函数,这是可行的。向量值初始化它们。不过,我不会抱怨有这样一个构造函数。那是一个构造函数吗?我对构造器了解不多。你能解释一下
{}
的作用吗?@IshaanSingh barn()是一个构造函数,{}是它的主体,但现在它是empty@chris“向量值初始化它们”是什么意思?@Andres非常感谢:-)它是一个结构初始化器,按顺序初始化字段。@IshaanSingh
vector barn_info(stalls,b)
是指带有
暂停
元素的向量,默认值为
b
它是一个结构初始化器,按顺序初始化字段。@IshaanSingh
vector barn_info(暂停,b)
表示带有
暂停
元素的向量,默认值为
b
下面的两个答案都有效,但由于您希望两个成员都是
false
,因此在这种情况下,您只需
向量仓信息(暂停)
向量将包含
暂停
个数的元素,每个元素都将被初始化,这将把
bool
两个成员都设置为
false
。下面的两个答案都可以,但由于您希望两个成员都是
false
,所以在这种情况下,您只需要
向量仓信息(暂停)向量
将包含
暂停
个数的元素,每个元素都将被初始化,这将把
bool
两个成员都设置为
false
barn_info.assign(stalls, {false, false});