3

如何在 C++ 中使用构造函数的初始化列表来初始化(字符串)数组或向量?

请考虑这个例子,我想用给构造函数的参数初始化一个字符串数组:

#include <string>
#include <vector>

class Myclass{
           private:
           std::string commands[2];
           // std::vector<std::string> commands(2); respectively 

           public:
           MyClass( std::string command1, std::string command2) : commands( ??? )
           {/* */}
}

int main(){
          MyClass myclass("foo", "bar");
          return 0;
}

除此之外,在创建对象时建议使用两种类型(数组与向量)中的哪一种来保存两个字符串,为什么?

4

4 回答 4

12

使用 C++11,您可以这样做:

class MyClass{
           private:
           std::string commands[2];
           //std::vector<std::string> commands;

           public:
           MyClass( std::string command1, std::string command2)
             : commands{command1,command2}
           {/* */}
};

对于 C++11 之前的编译器,您需要在构造函数的主体中初始化数组或向量:

class MyClass{
           private:
           std::string commands[2];

           public:
           MyClass( std::string command1, std::string command2)
           {
               commands[0] = command1;
               commands[1] = command2;
           }
};

或者

class MyClass{
           private:
           std::vector<std::string> commands;

           public:
           MyClass( std::string command1, std::string command2)
           {
               commands.reserve(2);
               commands.push_back(command1);
               commands.push_back(command2);
           }
};
于 2013-10-24T13:37:41.550 回答
1

在初始化列表中,您可以调用要初始化的成员的类的任何构造函数。查看文档std::stringstd::vector选择适合您的构造函数。

对于存储两个对象,我建议使用std::pair. 但是,如果您期望这个数字可能会增长std::vector是最好的选择。

于 2013-10-24T13:31:12.463 回答
1

你可以使用

#include <utility>

...
std::pair<string, string> commands;
commands=std::make_pair("string1","string2");

...
//to access them use
std::cout<<commands.first<<" "<<commands.second;
于 2013-10-24T13:32:47.890 回答
1
class Myclass{
private:
    Vector<string> *commands;
    // std::vector<std::string> commands(2); respectively 

    public:
    MyClass( std::string command1, std::string command2)
    {
        commands.append(command1);  //Add your values here
    }
}
于 2013-10-24T13:35:12.993 回答