请求有关C++ 11中最先进文件读取的示例

Mic*_*ael 1 c++ stl binaryfiles

有大量关于网络上文件阅读的例子.许多示例使用普通的旧C风格文件读取.其他示例使用C++的东西,但我不知道它是否只是另一个普通程序员编写教程或者它是否是真正优秀的现代C++.

所以,问题是:现在一个优秀的C++程序员如何解决以下任务?

  1. 从二进制文件中读取一些表示单个原始类型变量的字节.
  2. 读取已知(但不是常数)长度的已知基本类型的数组.
  3. 当类型尚未知道时读取字节数组,但已知长度(以字节为单位).例如,如果从文件中读取数组,然后将其传递给实际从中构建对象的函数.

utn*_*tim 6

现在一个优秀的C++程序员如何解决以下任务?

1.从二进制文件中读取一些表示单个原始类型变量的字节.

如果要"读取表示类型的某些字节",请使用std :: istream :: read.使用operator >>一个实例的类型(你必须实现该操作符自己对于非原生类型,但是这是要做到这一点).

2.读取已知(但不是常数)长度的已知基本类型的数组.

std::vector<YourType> YourVector;
KnownElementsCount = 100;
std::copy_n(std::istream_operator<YourType>{ in }, KnownElementsCount,
    std::back_inserter(YourVector));
Run Code Online (Sandbox Code Playgroud)

如果要读取未知长度的值数组:

std::vector<YourType> YourVector;
std::copy(std::istream_operator<YourType>{ in }, std::istream_operator<YourType>{},
    std::back_inserter(YourVector));
Run Code Online (Sandbox Code Playgroud)

3.当类型尚未知道时读取一个字节数组,但以字节为单位的长度是已知的.例如,如果从文件中读取数组,然后将其传递给实际从中构建对象的函数.

使用std :: istream :: read; 然后,从数据构造您的对象.