我一般都喜欢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
答案 0 :(得分:4)
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 **
的函数中起作用。
using boost::assign::list_of;
std::vector<std::string> v = list_of("sds")("bsdf")("dsdfaf");
答案 1 :(得分:3)
在C ++ 11中,你可以写:
std::vector<std::string> v{"sds", "bsdf", "dsdfaf"};
答案 2 :(得分:2)
有更好/更清洁的方法吗?
您可以使用大括号初始化语法:
std::vector<std::string> v { "sds", "bsdf", "dsdfaf" };
请注意,初始化后v保持不变。
您可以使用std::array
(自C ++ 11起):
std::array<std::string, 3> a {{ "sds", "bsdf", "dsdfaf" }};
你仍然需要“硬编码”元素的数量,但它不是动态的,所以你不会失去太多。
答案 3 :(得分:0)
请注意,初始化后v保持不变。所以一个数组也可能有用,但是数组的问题是我需要在代码中硬编码数组的长度。
那不是真的。你可以像以下那样以规范的方式获得数组大小:
#include <iostream>
int main()
{
char const * const v[] = {"sds", "bsdf", "dsdfaf"};
// Only works when array length is known at compile-time.
size_t const len = sizeof(v) /sizeof(v[0]);
for (size_t i = 0; i < len; ++i)
std::cout << v[i] << '\n';
}
输出结果为:
$ g++ -Wall foo.cpp ; ./a.out
sds
bsdf
dsdfaf