可以初始化字符串的向量数组。
例如:
static std::vector<std::string> v;
//声明为班级成员
我static
只是用来初始化并用字符串填充它。或者,如果不能像常规数组那样初始化它,我应该在构造函数中填充它。
Answers:
有点:
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;
}
sizeof(char*)
是4,是的。在64位计算机上没有那么多。sizeof
每次迭代数组时,我只是无聊键入很多东西。我的end
函数对数组的作用与std::end
C ++ 0x相同。
end
函数时,我的意思是答案中的函数模板,与C ++ 0x的相反std::end
。我不声称自己发明了它!
N
推导出作为3
从参数的类型vinit
,这是const char* [3]
。为此,T
也可以推论为const char *
相同的类型。因此,编写end(vinit)
就像end<const char*, 3>(vinit)
通过模板参数推导编写。
现在是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" };
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + 4);
在C ++ 0x中,您可以利用std::initializer_list<>
:
与@ Moo-Juice相同:
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
在C ++ 0x中,您将能够像数组一样初始化容器