初始化字符串向量数组

问题描述 投票:0回答:9

是否可以初始化字符串向量数组?

例如:

static std::vector<std::string> v; //declared as a class member

我使用

static
只是为了初始化并用字符串填充它。或者如果它不能像我们使用常规数组那样初始化,我应该将其填充到构造函数中吗?

c++ stl
9个回答
88
投票

现在是 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


68
投票

排序:

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;
}

36
投票

如果您使用的是 cpp11(如果需要,请使用

-std=c++0x
标志启用),那么您可以简单地像这样初始化向量:

// static std::vector<std::string> v;
v = {"haha", "hehe"};

15
投票
 const char* args[] = {"01", "02", "03", "04"};
 std::vector<std::string> v(args, args + 4);

在 C++0x 中,您可以利用

std::initializer_list<>
:

http://en.wikipedia.org/wiki/C%2B%2B0x#Initializer_lists


11
投票

MSVC 2010 解决方案,因为它不支持向量

std::initializer_list<>
,但它支持
std::end

const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));

5
投票

与@Moo-Juice相同:

const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size

2
投票

看看

boost::assign


1
投票

在 C++0x 中,您将能够像数组一样初始化容器

http://www2.research.att.com/~bs/C++0xFAQ.html#init-list


0
投票

最主要的是

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");
© www.soinside.com 2019 - 2024. All rights reserved.