简体   繁体   English

初始化字符串的向量数组

[英]Initialize a vector array of strings

Would it be possible to initialize a vector array of strings. 是否可以初始化字符串的向量数组。

for example: 例如:

static std::vector<std::string> v; //declared as a class member //声明为类成员

I used static just to initialize and fill it with strings. 我使用static来初始化并用字符串填充它。 Or should i just fill it in constructor if it can't be initialized like we do regular arrays. 或者我应该在构造函数中填充它,如果它不像我们常规数组那样初始化。

Sort of: 有点:

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 is just so I don't have to write vinit+3 and keep it up to date if the length changes later. end就是这样我不必写vinit+3并且如果长度稍后改变则保持最新。 Define it as: 将其定义为:

template<typename T, size_t N>
T * end(T (&ra)[N]) {
    return ra + N;
}

If you are using cpp11 (enable with the -std=c++0x flag if needed), then you can simply initialize the vector like this: 如果你正在使用cpp11(如果需要,启用-std=c++0x标志),那么你可以简单地初始化这样的向量:

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

It is 2017, but this thread is top in my search engine, today the following methods are preferred (initializer lists) 这是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" }; 

From https://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists 来自https://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists

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

And in C++0x, you can take advantage of std::initializer_list<> : 在C ++ 0x中,您可以利用std::initializer_list<>

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

MSVC 2010 solution, since it doesn't support std::initializer_list<> for vectors but it does support std::end MSVC 2010解决方案,因为它不支持向量的std::initializer_list<>但它确实支持std::end

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

same as @Moo-Juice: 和@ 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

In C++0x you will be able to initialize containers just like arrays 在C ++ 0x中,您将能够像数组一样初始化容器

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM