在 C++11 之前将字符串列表填充到向量中
Populating a list of strings into a vector in pre C++11
首先,如果这是一个简单而明显的问题,我想道歉。我知道对于有专业知识的人来说,这是一个相当容易的事情。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);
它有效,但写起来有点苦差事,我相信有更好的方法。
规范的方法是在合适的标头中定义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;
}
正如 chris 所指出的,您可以将所有文字存储到数组中,然后从该数组初始化向量:
#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
。
如果你"卡在"C++11 之前的C++,只有几种选择,它们不一定"更好"。
首先,您可以创建一个常量 C 字符串数组并将它们复制到向量中。您可能会节省一些键入,但是您在那里有一个复制循环。
其次,如果你可以使用boost,你可以使用boost::assign的list_of,如本答案中所述。
相关文章:
- 用C++中的数字和条件填充向量
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 有没有办法使用数组填充向量?
- 用对对填充向量未按预期工作
- 可选类输入中的 C++ 填充向量
- 用构造函数调用填充向量
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- C 中的填充向量
- 从输入文件中填充向量的向量
- 在循环中创建和填充向量
- 如何使用两列C 从文本文件中填充向量
- 在C++编程语言中,如何用n个向量长度的所有可能的字符串组合来填充向量
- 使用精神,如何在AST结构内填充向量
- 如何用键盘输入来填充C++向量
- 用随机数C 填充向量
- 构造时,用整数序列填充向量
- 使用指向部分专用函数成员的指针自动填充向量
- 用于填充向量的c++有状态函子
- C++:在类构造函数中填充向量后,向量成员被销毁
- 如何在类中用不同类的对象填充向量