c++ - 寻找,相对或绝对位置?

标签 c++ seekg

我需要从文件中读取一个数组。该数组在文件中不是连续排序的,必须跳转“偏移”字节才能获得下一个元素。 假设我读取一个非常大的文件,什么更有效率。

1) 使用增量相对位置。
2)使用绝对位置。

选项 1:

int var[N];
seekg(0);
for (int i=0; i<N; i++) {
  file.read( (char*) var+i, sizeof(int))
  seekg(offset,ios_base::cur);
}

选项 2:

int var[N];
for (int i=0; i<N; i++) {
  file.seekg(offset*i);
  read( (char*) var+i, sizeof(int))
}

最佳答案

read 已经提前了位置,所以你不需要在循环内寻找。此外,数组在内存中的布局是连续的,因此您可以说:

std::vector<int> var(N);

auto res = file.read(reinterpret_cast<char*>(var.data()), sizeof(int) * var.size());

只需确保随后检查 resfile 的值:

if (!file || res != sizeof(int) * var.size())
{
     // an error occurred
}

如果您正在读取文件的随机部分,那么您的查找方式没有任何区别(文件本质上是“随机访问”)。但一定要在每次读取之后运行上述测试以捕获错误。

关于c++ - 寻找,相对或绝对位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505674/

相关文章:

c++ - 指向 auto_ptr 的指针而不是经典的双指针

c++ - 制作生成器列表(lambda 的 vector )会导致通过引用捕获的非常奇怪的行为

c++ - Seekg(ios::beg) 不返回到重定向输入的开头

c++ - 如何通过CURLOPT_HEADERFUNCTION提取头部信息?

c++ - 如何生成随机顶点以在 C++ 中形成凸多边形?

c++ - 语法错误 : missing ; before *

C++ 试图忽略文件的一部分?

C++:file.seekg() 似乎没有返回当前位置

c++ - Seekg 未按预期运行