在 std::vector 的构造函数中使用 std::string 数据类型

Using std::string Datatype in std::vector's Constructor

本文关键字:std string 数据类型 构造函数 vector      更新时间:2023-10-16

与其说这是一个关于RapidXML约定的具体问题,不如说是一个关于使用std::vector的构造函数的问题。

在我发现的其他人使用RapidXML的所有例子中,每个人都总是使用std::vector的构造函数将数据读入char的向量中,如下所示:

vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());

这肯定是有原因的,因为当我尝试将其更改为 std::string 的向量时,我得到一个充满错误的屏幕,这是第一个错误:

error: invalid conversion from ‘void*’ to ‘std::istreambuf_iterator<std::basic_string<char> >::streambuf_type* {aka std::basic_streambuf<std::basic_string<char>, std::char_traits<std::basic_string<char> > >*}’

有没有办法使用 std::string,如果没有,为什么?

你想做什么?

是否希望文件的内容位于单个字符串中?如果是这样,那么

string buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());

应该这样做。

另一方面,如果你想要一个字符串向量,每个字符串都包含文件中的一行,你必须编写这样的循环(未经测试的代码):

vector <string> lines;
for (string aLine; std::getline(theFile, aLine) ; )
    lines.push_back(aLine);