我正在运行C++代码,我需要从txt文件导入数据。文本文件包含10,000行。每行包含n列二进制数据。
代码必须循环100,000次,每次它必须随机地从txt文件中选择一行,并将列中的二进制值分配给一些变量。
编写这段代码最有效的方法是什么?我应该先将文件加载到内存中,还是应该随机打开一个随机的行号?
如何在C++中实现这一点?
发布于 2011-06-29 01:16:50
要随机访问文本文件中的一行,所有行都需要具有相同的字节长度。如果你没有,你需要循环,直到你到达正确的行。由于这对于如此多的访问来说会相当慢,所以最好将它加载到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
,您可以获得随机访问权限,并且只需在整个文件中循环一次。
发布于 2011-06-29 02:57:29
10K行是一个非常小的文件。比方说,如果每行有100个字符,它将占用1MB的RAM。
将其加载到vector
中,并以您想要的方式访问它。
发布于 2011-06-29 01:23:14
也许不是最有效的,但你可以试试这个:
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是否有文件结束、索引越界等错误……
https://stackoverflow.com/questions/6514774
复制