下午好。 我有以下几种情况:有三组数据,每组是一个二维表,其中约有50万个字段。 (~6000行和~8000列)。 该数据存储在二进制文件中 语言 - c + +
我只需要显示这些数据。 但是当我试图阅读时我卡住了。(使用std :: vector但等待时间太长) 读取\存储这么多数据的最佳方法是什么? (std :: vectors,简单指针,特殊库)?
也许链接到文章,书籍或仅仅是个人经历?
答案 0 :(得分:2)
好吧,如果你不需要同时使用所有这些数据,你可以使用内存映射文件技术并读取数据,因为它是一个巨大的数组。通常,操作系统/文件系统缓存适用于大多数应用程序,但肯定是YMMV。
答案 1 :(得分:1)
没有理由不在ifstream / ofstream上使用普通的旧读写。对于BigArray b(6000,8000),以下代码不需要很长时间;
#include <fstream>
#include <iostream>
#include <string>
#include <stdlib.h>
class BigArray {
public:
BigArray( int r, int c ) : rows(r), cols(c){
data = (int*)malloc(rows*cols*sizeof(int));
if( NULL == data ){
std::cout << "ERROR\n";
}
}
virtual ~BigArray(){ free( data ); }
void fill( int n ){
int v = 0;
int * intptr = data;
for( int irow = 0; irow < rows; irow++ ){
for( int icol = 0; icol < cols; icol++ ){
*intptr++ = v++;
v %= n;
}
}
}
void readFromFile( std::string path ){
std::ifstream inf( path.c_str(), std::ifstream::binary );
inf.read( (char*)data, rows*cols*sizeof(*data) );
inf.close();
}
void writeToFile( std::string path ){
std::ofstream outf( path.c_str(), std::ifstream::binary );
outf.write( (char*)data, rows*cols*sizeof(*data) );
outf.close();
}
private:
int rows;
int cols;
int* data;
};