C++ 同时声明并初始化一个struct/class数组

C++ 同时声明并初始化一个struct/class数组,c++,class,struct,initialization,C++,Class,Struct,Initialization,一, 我知道可以在声明中初始化结构数组。例如: struct BusStruct { string registration_number; string route; }; struct BusStruct BusDepot[] = { { "ED3280", "70" }, { "ED3536", "73" }, { "FP6583", "74A" }, }; 如果将结构更改为类,如下所示: class BusClass { pr

一,

我知道可以在声明中初始化结构数组。例如:

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
};
是否可以对结构执行相同的操作(即同时声明和初始化一个类数组)

二,。 我认为不可能同时声明和初始化
vector
vector

  • 不,您将无法以使用结构的方式初始化类。但是您可以在数组声明中编写类构造函数
  • C++没有内置的初始化向量的方法,除非您想从已初始化的数组加载向量
  • 是否可以对结构执行相同的操作(即同时声明和初始化一个类数组)

    除非您创建了一个合适的构造函数:

    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) { }
    };
    
    或者将所有成员公开并省略构造函数,在这种情况下,可以使用与结构相同的初始化语法。但我想那不是你的本意

    我认为不可能同时声明和初始化
    vector
    vector

    <0 >当前的C++是不可能的。但是,您可以使用使这成为可能的库。我建议这样做。但是,对于这一点,类必须有构造函数,同样,结构也必须有构造函数,或者需要创建某种工厂函数

    BusStruct make_bus(string const& registration_number, 
                       string const& route) { ... }
    

    如果希望在其他情况下使用括号内的初始值设定项列表保持结构的初始值设定

    C++本机支持两种形式的向量初始化,这两种形式都不是您想要的

    1:每个元素与中的相同:

    vector<int> ints(4,1000); //creates a vector of 4 ints, each value is 1000.
    
    矢量整数(41000)//创建一个4整数的向量,每个值为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
    
    矢量原件(31000)//原始向量有3个值,都等于1000。
    向量otherVector(original.begin(),original.end())//otherVector有3个值,从原始向量复制而来
    
    谢谢您的回答。这证实了我的怀疑,我现在需要找到一种方法来初始化它们。谢谢你的解释和更新我的原始帖子(使向量背后的部分可见)。我真的不介意它是公共的还是受保护的,但是你关于boost库的建议很好。我会看一看,如果你处理的是可能最终会发生变化的任何类型的数据,在任何可能持续更长时间的软件中,任何将数据与代码分离的方法都是可取的。Textfiles、SqlLite、XmlFiles、googleprotobuffers和其他一些您可能希望看到的可能性您是对的,但不幸的是,我不想用相同的起始值启动所有元素!