是否可以初始化字符串的向量数组。
例如:
static std::vector<std::string> v;
//声明为类成员
我使用static
来初始化并用字符串填充它。或者我应该在构造函数中填充它,如果它不像我们常规数组那样初始化。
答案 0 :(得分:63)
排序:
class some_class {
static std::vector<std::string> v; // declaration
};
const char *vinit[] = {"one", "two", "three"};
std::vector<std::string> some_class::v(vinit, end(vinit)); // definition
end
只是因为我不必写vinit+3
并且如果长度稍后更改,请保持最新状态。将其定义为:
template<typename T, size_t N>
T * end(T (&ra)[N]) {
return ra + N;
}
答案 1 :(得分:27)
如果您正在使用cpp11(如果需要,可以使用-std=c++0x
标志启用),那么您可以像这样简单地初始化矢量:
// static std::vector<std::string> v;
v = {"haha", "hehe"};
答案 2 :(得分:21)
2017年,但这个帖子在我的搜索引擎中排名第一,今天首选以下方法(初始化列表)
std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" };
std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" });
std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" };
答案 3 :(得分:15)
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + 4);
在C ++ 0x中,您可以利用std::initializer_list<>
:
答案 4 :(得分:10)
MSVC 2010解决方案,因为它不支持向量std::initializer_list<>
,但它支持std::end
const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));
答案 5 :(得分:5)
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
答案 6 :(得分:2)
答案 7 :(得分:1)
在C ++ 0x中,您将能够像数组一样初始化容器