【发布时间】:2017-03-01 20:34:25
【问题描述】:
我在从二进制文件中读取二维向量时遇到了一些问题:
例如:
我的二进制文件结构如下:
243524
764756
746384
现在我想创建一个与 bin 文件完全相同的 2D 矢量。
到目前为止我做了什么:
我创建了一个包含所有元素的一维向量。然后我创建了一个循环并填充了二维向量。
我的问题是我有一个巨大的 .bin 文件,而 for 循环花费了很多时间。 有没有可能让 2DVector 更快?
我的代码:
ifstream file("C:\\XXX.bin", ios::in | ios::binary | ios::ate);
char * buffer;
long size;
file.seekg(0, std::ios::end);
size = file.tellg();
buffer = new char[size];
file.read(buffer, size);
file.close();
double* double_values = (double*)buffer;//reinterpret as doubles
vector<double> buffer2(double_values, double_values + (size / sizeof(double)));
//cout << "Filling matrix with test numbers.";
int h = 0;
for (int i = 0; i < (size / sizeof(double)) / row; i++)
{
vector<double> temp;
for (int j = 0; j < row; j++)
{
if (h<size / sizeof(double))
{
temp.push_back(buffer2[h]);
h++;
}
}
bin_file.push_back(temp);
}
希望某人能帮助我:)
【问题讨论】:
-
我的建议是使用单维向量,使其成为类的成员,并使用该类通过重载
operator()来假装具有二维的向量。这应该有助于加快阅读速度,因为您可以将整个文件读入单个向量。 -
@NathanOliver 所写内容的示例(没有
vector,但很容易修改为使用vector)。 -
对不起,我不明白..:( 我现在所做的是将 .bin 文件的所有元素存储在一个名为 Elements 的向量中。这个向量是一个类的一部分名称测试。我现在如何通过重载 operator() 创建 2dVector?你有可能有代码示例吗?抱歉我的愚蠢问题,但我从未使用过重载运算符:/
标签: c++ visual-c++ vector binary