C ++读取txt的随机行吗?

我正在运行C ++代码,我需要从txt文件导入数据。 该文本文件包含10,000行。 每行包含n列二进制数据。

代码必须循环100,000次,每次必须从txt文件中随机选择一行,并将列中的二进制值分配给某些变量。

什么是写这段代码最有效的方法? 我应该首先将文件加载到内存中,还是应该随机打开一个随机行号?

我如何在C ++中实现这一点?


要随机访问文本文件中的一行,所有行都需要具有相同的字节长度。 如果你没有这个,你需要循环,直到你找到正确的路线。 因为这样访问会很慢,所以最好将它加载到std::string s的std::vector中,每个条目都是一行(这很容易用std::getline )。 或者因为你想从不同的列中分配值,你可以使用一个std::vector和你自己的结构

struct MyValues{
  double d;
  int i;
  // whatever you have / need
};

std::vector<MyValues> vec;

这可能会更好,而不是一直解析这条线。

使用std::vector ,你得到了你的随机访问权限,只需要在整个文件中循环一次。


10K行是一个非常小的文件。 如果每行有100个字符,它将使用大量1MB的RAM。

将它载入一个vector并按照你想要的方式访问它。


也许不是最高效的,但你可以试试这个:

int main() {
    //use ifstream to read
    ifstream in("yourfile.txt");

    //string to store the line
    string line = "";

    //random number generator
    srand(time(NULL));

    for(int i = 0; i < 100000; i++) {
        in.seekg(rand() % 10000);
        in>>line;
        //do what you want with the line here...
    }
}

我现在太懒惰了,但你需要确保你检查你的ifstream是否有错误,比如文件结束,索引超出界限等等......

链接地址: http://www.djcxy.com/p/53323.html

上一篇: C++ reading random lines of txt?

下一篇: Does onInterceptTouchEvent() really works as the sdk said?