如何在 C++ 中最好地初始化字符串向量?

Moh*_*imi 8 c++

我通常喜欢 python 的语法。

v = [“sds”,“bsdf”,“dsdfaf”]

我目前在 C++ 中拥有的内容如下所示

vector<string> v;
v.push_back("sds");
v.push_back("bsdf");
v.push_back("dsdfaf");
Run Code Online (Sandbox Code Playgroud)

有没有更好/更干净的方法来做到这一点?请注意,初始化后 v 保持不变。因此,数组也可能有效,但数组的问题是我还需要在代码中对数组的长度进行硬编码。

char* v[] = {"sds", "bsdf", "dsdfaf"};
for (int i = 0; i < 3; ++i) do_something(v[i]);
Run Code Online (Sandbox Code Playgroud)

编辑:我没有 C++11。我的编译器是 gcc 4.1.2

Pra*_*ian 4

C++03解决方案:

使用带有一对迭代器的向量构造函数。

char* arr[] = {"sds", "bsdf", "dsdfaf"};
vector<string> v(arr, arr + sizeof(arr)/sizeof(arr[0]));
Run Code Online (Sandbox Code Playgroud)

如果初始化后长度不需要更改,则使用数组。为了避免硬编码数组长度,请使用此函数模板来推断大小

template<typename T, std::size_t N>
std::size_t length_of( T const (&)[N] ) { return N; }

char* v[] = {"sds", "bsdf", "dsdfaf"};
for (int i = 0; i < length_of(v); ++i) do_something(v[i]);
Run Code Online (Sandbox Code Playgroud)

请注意,这在您向其传递char **.


使用boost::assign::list_of

using boost::assign::list_of;
std::vector<std::string> v = list_of("sds")("bsdf")("dsdfaf");
Run Code Online (Sandbox Code Playgroud)