我通常喜欢python的语法。
V= "sds“、"bsdf”、"dsdfaf“
我目前在C++中的内容如下所示
vector<string> v;
v.push_back("sds");
v.push_back("bsdf");
v.push_back("dsdfaf");有没有更好/更干净的方法来做到这一点?注意,v在初始化后保持不变。因此,数组也可能工作,但是数组的问题是,我还需要在代码中硬编码数组的长度。
char* v[] = {"sds", "bsdf", "dsdfaf"};
for (int i = 0; i < 3; ++i) do_something(v[i]);编辑:我没有C++11。我的编译器是gcc 4.1.2
发布于 2014-01-16 21:46:48
C++03解决方案:
使用使用一对迭代器的向量构造函数。
char* arr[] = {"sds", "bsdf", "dsdfaf"};
vector<string> v(arr, arr + sizeof(arr)/sizeof(arr[0]));如果初始化后不需要更改长度,则使用数组。若要避免硬编码数组长度,请使用此函数模板推断大小。
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]);请注意,这在传递char **的函数中不起作用。
使用boost::assign::list_of
using boost::assign::list_of;
std::vector<std::string> v = list_of("sds")("bsdf")("dsdfaf");发布于 2014-01-16 21:33:24
在C++11中,您可以编写:
std::vector<std::string> v{"sds", "bsdf", "dsdfaf"};发布于 2014-01-16 21:33:34
有没有更好/更干净的方法来做到这一点?
您可以使用大括号初始化语法。
std::vector<std::string> v { "sds", "bsdf", "dsdfaf" };注意,v在初始化后保持不变。
您可以使用std::array (自C++11):
std::array<std::string, 3> a {{ "sds", "bsdf", "dsdfaf" }};您仍然需要对元素的数量进行“硬编码”,但是它并不是动态的,所以您不会丢失太多。
https://stackoverflow.com/questions/21173308
复制相似问题