基于外部文件的 C++ 数组
C++ Array based on external file
我的问题比较简单(至少对我来说是这样)。假设我有一个文件 'test.txt' 包含 9 行这样的数字:
8 4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4
第一个数字 (8) 告诉我第一行后面有多少行浮点数,另一个 (4) 是进一步计算所需的数字。然后我们有一个包含点坐标的 table 8x2。现在我尝试编写一个简单的函数,它(一旦调用)将根据外部文件的内容创建我的数据。
这是我的代码:
// Function to display matrix
void showMatrix(float *matrix, int size)
{
for (int x = 0; x < size; x++) {
printf("%5f ",*matrix);
matrix++;
}
matrix -= size;
printf("\n");
}
// Function to upload single file
void loadInputFile(std::string file_name, float* data_X, float* data_Y, int& data_size, int& centre_interval) {
// Open text file
std::ifstream dataFile;
dataFile.open(file_name.c_str());
if (!dataFile.good())
return;
// First line contains data size and another number:
dataFile >> data_size >> centre_interval;
printf("Loading data...\nLoaded values: dataSize = %d, centreInterval = %d\n", data_size, centre_interval);
// Create data tables under specified pointers:
data_X = new float[data_size];
data_Y = new float[data_size];
printf("Created table of size %d\n", data_size);
for (int i = 0; i < data_size; i++) {
dataFile >> data_X[i] >> data_Y[i];
}
// No error - loaded correctly
showMatrix(data_X, data_size);
// Close file
dataFile.close();
}
int main(int argn, char ** argc) {
// I want it to be filled by my function
float* dataX;
float* dataY;
int dataSize;
int centreInterval;
// My file name existing in the same path
std::string filename = "test.txt";
// Calling my function
loadInputFile(input_names[i], dataX, dataY, dataSize, centreInterval);
// Loaded correctly
printf("Data load results:\n dataSize = %d, centreInterval = %d\n", dataSize, centreInterval);
// Error :/
showMatrix(dataX, dataSize);
return 0;
}
我能够将这些数据正确地存储在我的函数中,但是我将它传递到外部的方式似乎有误。非常感谢指出我的错误。
您正在 dataX
和 dataY
参数 按值 传递,这意味着它们是 复制的 和在函数内部,您只为本地副本而不是原始副本分配内存。
将函数更改为
void loadInputFile(std::string file_name, float*& data_X, float*& data_Y, int& data_size, int& centre_interval)
我的问题比较简单(至少对我来说是这样)。假设我有一个文件 'test.txt' 包含 9 行这样的数字:
8 4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4
第一个数字 (8) 告诉我第一行后面有多少行浮点数,另一个 (4) 是进一步计算所需的数字。然后我们有一个包含点坐标的 table 8x2。现在我尝试编写一个简单的函数,它(一旦调用)将根据外部文件的内容创建我的数据。
这是我的代码:
// Function to display matrix
void showMatrix(float *matrix, int size)
{
for (int x = 0; x < size; x++) {
printf("%5f ",*matrix);
matrix++;
}
matrix -= size;
printf("\n");
}
// Function to upload single file
void loadInputFile(std::string file_name, float* data_X, float* data_Y, int& data_size, int& centre_interval) {
// Open text file
std::ifstream dataFile;
dataFile.open(file_name.c_str());
if (!dataFile.good())
return;
// First line contains data size and another number:
dataFile >> data_size >> centre_interval;
printf("Loading data...\nLoaded values: dataSize = %d, centreInterval = %d\n", data_size, centre_interval);
// Create data tables under specified pointers:
data_X = new float[data_size];
data_Y = new float[data_size];
printf("Created table of size %d\n", data_size);
for (int i = 0; i < data_size; i++) {
dataFile >> data_X[i] >> data_Y[i];
}
// No error - loaded correctly
showMatrix(data_X, data_size);
// Close file
dataFile.close();
}
int main(int argn, char ** argc) {
// I want it to be filled by my function
float* dataX;
float* dataY;
int dataSize;
int centreInterval;
// My file name existing in the same path
std::string filename = "test.txt";
// Calling my function
loadInputFile(input_names[i], dataX, dataY, dataSize, centreInterval);
// Loaded correctly
printf("Data load results:\n dataSize = %d, centreInterval = %d\n", dataSize, centreInterval);
// Error :/
showMatrix(dataX, dataSize);
return 0;
}
我能够将这些数据正确地存储在我的函数中,但是我将它传递到外部的方式似乎有误。非常感谢指出我的错误。
您正在 dataX
和 dataY
参数 按值 传递,这意味着它们是 复制的 和在函数内部,您只为本地副本而不是原始副本分配内存。
将函数更改为
void loadInputFile(std::string file_name, float*& data_X, float*& data_Y, int& data_size, int& centre_interval)