C++用迭代器初始化向量

Tim*_*mD1 0 c++ string vector stringstream ifstream

我试图将无符号字符的文件读入向量.我稍微迂回的做法是创建一个输入文件流,将该数据读入字符串流,并使用stringstream的内容初始化一个向量.可能有更好的方法来执行此操作,并且我现有的代码会导致使用某些文件出现分段错误.

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());
Run Code Online (Sandbox Code Playgroud)

我已经包含了所有必需的头文件和using声明,并file_exists()返回一个布尔值,指示文件是否存在.

我的问题是:为什么上面的代码不正确,正确实现相同目标的最佳方法是什么?

Cor*_*lks 8

std::stringstream::str()返回一个std::string.也就是说,它是一个临时字符串.

因此,ss.str().begin()返回临时字符串的开始迭代器,并ss.str().end()返回不同临时字符串的结束迭代器,因为两个ss.str()调用都返回不同的临时字符串.你不能在不同的对象之间混合迭代器!

要解决此问题,请使用一个字符串:

std::string str = ss.str();
Run Code Online (Sandbox Code Playgroud)

而现在只是通过str.begin()str.end().