初始化一个vectorstring数组
是否有可能初始化一个向量数组的string。
例如:
static std::vector<std::string> v;
//声明为类成员
我用static
只是初始化和填充string。 或者我应该只填写它的构造函数,如果它不能像我们做常规数组初始化。
有点:
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; }
如果你正在使用cpp11(如果需要,使用-std=c++0x
标志来启用),那么你可以简单地初始化这样的vector:
// static std::vector<std::string> v; v = {"haha", "hehe"};
const char* args[] = {"01", "02", "03", "04"}; std::vector<std::string> v(args, args + 4);
而在C ++ 0x中,你可以利用std::initializer_list<>
:
MSVC 2010解决scheme,因为它不支持向量的std::initializer_list<>
,但它支持std::end
const char *args[] = {"hello", "world!"}; std::vector<std::string> v(args, std::end(args));
和@ Moo-Juice一样:
const char* args[] = {"01", "02", "03", "04"}; std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
看看boost::assign
。
在C ++ 0x中,你将能够像数组一样初始化容器