我通常喜欢 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
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 **.
using boost::assign::list_of;
std::vector<std::string> v = list_of("sds")("bsdf")("dsdfaf");
Run Code Online (Sandbox Code Playgroud)