如何使用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;
}
除此之外,建议在创建对象时保存两个字符串的两种类型(数组与矢量)中的哪一种,以及为什么?
答案 0 :(得分:11)
使用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}
{/* */}
};
对于pre-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);
}
};
答案 1 :(得分:1)
在初始化列表中,您可以调用要初始化的成员的类的任何构造函数。查看std::string
和std::vector
文档,然后选择适合您的构造函数。
为了存储两个对象,我建议使用std::pair
。但是,如果您希望数字增长std::vector
是最佳选择。
答案 2 :(得分:1)
您可以使用
#include <utility>
...
std::pair<string, string> commands;
commands=std::make_pair("string1","string2");
...
//to access them use
std::cout<<commands.first<<" "<<commands.second;
答案 3 :(得分: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
}
}