所以我有一个相当大的文本文件,其中包含2列数字,我希望能够在一个程序中使用我正在编写的二维数组。这是每次启动程序时都需要访问的数据,我觉得每次启动程序时都必须使用文件读取器读取数据太慢/效率低。
所以我想知道是否有一种更简单/更有效的方式来访问数据而无需以传统方式(ifstream等)读取数据?我相信我曾经见过如下的事情:
float array[]{
#include "myfile.txt"
}
但我甚至不确定这是否有效,我找不到任何相关信息。
答案 0 :(得分:2)
首先,您必须考虑如何声明和初始化二维数组。 简单地;
int x[5][2] = {
{1, 1},
{2, 2},
{3, 3},
{4, 4},
{5, 5}
};
如果来自文件的数组元素必须像exacly那样创建文件;
在file.txt
;
{1, 1},
{2, 2},
{3, 3},
{4, 4},
{5, 5}
遵循C ++规则包括文件预处理器指令,您可以像这样编写简单的代码;
Source.cpp
档案;
#include <iostream>
using namespace std;
int x[5][2] = {
#include "file.txt"
};
int main(int argc, char* argv[])
{
for(int i = 0; i < 5; ++i)
{
for(int j = 0; j < 2; j++)
{
cout << "x[" << i + 1 << "][" << j + 1 << "] = " << x[i][j] << " , ";
}
cout << endl;
}
return 0;
}
答案 1 :(得分:0)
为了完成这项工作,您应该以符合C ++语法的方式格式化文本文件。您可以按照一些教程进行操作,以便查看相关的示例以及对正在发生的事情的描述。
这是一个简短的例子:
1.0, 3.4, 3.14, 5.56
{}
大括号中,用这样的昏迷分隔每一列 {1.0, 3.14}, {4.1, 5.674}
上面假设您正在关注自己的
示例float array[] = {
#include "textFile.txt"
};
答案 2 :(得分:0)
如果您坚持在包含文件中嵌入数据的方式,则可以使用宏:
以下列格式写入数据:
#define DATA 1,2,3,4,5
(你可以把它分成几行,但保持逗号分隔格式。)
在源文件的顶部添加“myfile.h”。
使用DATA而不是#include语句:
float array[] {
DATA
};
答案 3 :(得分:0)
如果您不介意在数据更改时重新编译,那么您正在以正确的方式执行此操作。
当然数据必须有逗号,因为它必须是有效的C / C ++语法。
所有#include
都会将文件内容粘贴到源代码中。
OTOH,如果你介意在数据发生变化时重新编译,那么你需要动态分配内存并在程序启动时解析数据文件。 你需要克服的问题是你不一定事先知道数组的大小,如果使用动态扩展的数组,你可能会浪费相当多的时间来分配和删除内存,因为它会增加数组。 像往常一样,我的解决方案是违反直觉的。 我只读了两次文件,一次计算其中有多少个数,然后分配内存,然后再次读取文件,将数字解析到内存中。 (如果读取一次并不需要很长时间,也不会读取它两次,特别是因为它已经在系统缓存中。)
你说数据是二维的,但是你可以把它作为一维存在于数组中,只需要在两个维度上访问它,如下所示:
#define A(row,col) array[(row)*2 + (col)]