是否可以初始化字符串向量数组?
例如:
static std::vector<std::string> v; //declared as a class member
我使用
static
只是为了初始化并用字符串填充它。或者如果它不能像我们使用常规数组那样初始化,我应该将其填充到构造函数中吗?
现在是 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" };
来自 https://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists
排序:
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
标志启用),那么您可以简单地像这样初始化向量:
// 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 解决方案,因为它不支持向量
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
在 C++0x 中,您将能够像数组一样初始化容器
最主要的是
static
无助于初始化和用字符串填充向量。
但是可以在声明时像下面提到的那样进行初始化。 (其他答案里还有更多例子)
//JUST AN EMPTY VECTOR, BUT THAT CAN HOLD std::string type.
std::vector<std::string> vecStr;
//AN INITIALIZED VECTOR OF TWO EMPTY STRINGS.
std::vector<std::string> vecString(2);
//AN INITIALIZED VECTOR OF TWO STRINGS WITH "testing"
std::vector<std::string> anotherVecString(2, "testing");