1
我知道可以在声明中初始化一组结构。例如:
struct BusStruct
{
string registration_number;
string route;
};
struct BusStruct BusDepot[] =
{
{ "ED3280", "70" },
{ "ED3536", "73" },
{ "FP6583", "74A" },
};
如果将结构更改为类,如下所示:
class BusClass
{
protected:
string m_registration_number;
string m_route;
public:
// maybe some public functions to help initialisation
};
是否可以对结构执行相同的操作(即同时声明和初始化类数组)?
2。
我是否认为无法同时声明和初始化vector<BusStruct>
或vector<BusClass>
?
答案 0 :(得分:3)
是否可以对结构执行相同的操作(即同时声明和初始化类数组)?
除非您创建合适的构造函数:
class BusClass
{
protected:
string m_registration_number;
string m_route;
public:
// maybe some public functions to help initialisation
// Indeed:
BusClass(string const& registration_number,
string const& route)
:m_registration_number(registration_number),
m_route(route) { }
};
或者您将所有成员公开并省略构造函数,在这种情况下,您可以使用与struct相同的初始化语法。但我认为这不是你想要的。
我是否认为无法同时声明和初始化
vector<BusStruct>
或vector<BusClass>
?
不可能使用当前的C ++。但是,您可以使用可实现此目的的库。我推荐Boost.Assign。但是,为此,你的类必须有一个构造函数,同样也需要你的结构 - 或者你需要创建某种工厂函数
BusStruct make_bus(string const& registration_number,
string const& route) { ... }
如果要在其他情况下使用大括号括起初始化列表来保持struct的初始化。
答案 1 :(得分:1)
答案 2 :(得分:0)
C ++本身支持两种形式的向量初始化,也不是你想要的。
1:每个元素都与:
相同vector<int> ints(4,1000); //creates a vector of 4 ints, each value is 1000.
2:从现有矢量复制,如:
vector<int> original(3,1000); //original vector has 3 values, all equal 1000.
vector<int> otherVector(original.begin(),original.end()); //otherVector has 3 values, copied from original vector