我正在尝试将一个无符号字 rune 件读入一个 vector 中。我略微迂回的方法是创建一个输入文件流,将该数据读入一个字符串流,然后使用字符串流的内容初始化一个 vector 。可能有更好的方法来执行此操作,而我现有的代码使用某些文件会导致段错误。
string file_name = "output/comp" + to_string(start_id) + ".xml";
if( !file_exists(file_name))
{
cout << "File could not be found." << endl;
return 0;
}
ifstream ifs(file_name);
stringstream ss;
ss << ifs.rdbuf();
ss >> noskipws;
vector<unsigned char> raw_data(ss.str().begin(), ss.str().end());
我已经包含了所有必要的 header 和 using
声明,并且 file_exists()
返回一个 bool 值,指示文件是否存在。
我的问题是:为什么上面的代码不正确,正确实现相同目标的最佳方法是什么?
最佳答案
std::stringstream::str()
返回一个 std::string
。也就是说,它是一个临时字符串。
因此 ss.str().begin()
返回临时字符串的开始迭代器,ss.str().end()
返回结束迭代器不同 临时字符串,因为两个 ss.str()
调用都返回不同 临时字符串。您不能在不同对象之间混合使用迭代器!
要解决这个问题,请使用一个字符串:
std::string str = ss.str();
现在只需传递 str.begin()
和 str.end()
。
关于C++ 用迭代器初始化 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37924155/