如何读取部分文件到std :: list缓冲区?

时间:2018-08-08 12:49:08

标签: c++ list fstream

我使用std::vector

list_buffer_bytes.resize(BUFFER_SIZE_8_MB);
file_source.read(&vector_buffer_bytes[0], BUFFER_SIZE_8_MB * sizeof(char));

但是如果我将类型从std :: vector更改为std :: list

,我将无法做到

1 个答案:

答案 0 :(得分:0)

我想这样:

std::list<uchar> lst;

std::ifstream stream("somefile.txt");

for(int i=0;i<8192;i++)
{
   uchar a=0;
   stream.read(reinterpret_cast<char*>(&a),sizeof(uchar));
   lst.push_back(a);
}

此方法的问题来自以下事实:您无法稍后进行强制转换,因为链接列表中的字节(无论是单字节,双字节还是链接的字节)在内存中都不连续。 因此,如果您以后想重铸成另一种类型,可以这样做:

reinterpret_cast<output_type*>(std::vector<uchar>(lst.begin(),lst.end()).data());

希望它能对您有所帮助。