首先,如果这是一个令人眼花缭乱的简单而明显的问题,我想道歉。我知道对于拥有专业知识的人来说,这是一件相当容易的事情。 C ++ 11允许以列表形式初始化向量:
std::vector<std::string> v = {
"this is a",
"list of strings",
"which are going",
"to be stored",
"in a vector"};
但旧版本不提供此功能。我一直在努力想出填充字符串向量的最佳方法,到目前为止我唯一能想到的就是:
std::string s1("this is a");
std::string s2("list of strings");
std::string s3("which are going");
std::string s4("to be stored");
std::string s5("in a vector");
std::vector<std::string> v;
v.push_back(s1);
v.push_back(s2);
v.push_back(s3);
v.push_back(s4);
v.push_back(s5);
它有效,但写起来有点苦差事,我确信有更好的方法。
答案 0 :(得分:6)
规范方法是在合适的标头中定义begin()
和end()
函数,并使用以下内容:
char const* array[] = {
"this is a",
"list of strings",
"which are going",
"to be stored",
"in a vector"
};
std::vector<std::string> vec(begin(array), end(array));
函数begin()
和end()
的定义如下:
template <typename T, int Size>
T* begin(T (&array)[Size]) {
return array;
}
template <typename T, int Size>
T* end(T (&array)[Size]) {
return array + Size;
}
答案 1 :(得分:4)
正如chris所说,你可以将所有文字存储到数组中,然后从该数组初始化vector:
#include <vector>
#include <iostream>
#include <string>
int main()
{
const char* data[] = {"Item1", "Item2", "Item3"};
std::vector<std::string> vec(data, data + sizeof(data)/sizeof(const char*));
}
您无需显式转换为std::string
。
答案 2 :(得分:1)
如果您对C ++ 11 C ++之前的“卡住”,那么只有几种选择,而且它们不一定“更好”。
首先,您可以创建一个常量C字符串数组并将它们复制到向量中。你可以节省一点点打字,但那时你有一个复制循环。
其次,如果你可以使用提升,你可以use boost::assign's list_of as described in this answer。