gpt4 book ai didi

c++ - 使用指针为文件 C++ 中的数字动态分配存储空间

转载 作者:行者123 更新时间:2023-11-30 03:56:18 25 4
gpt4 key购买 nike

我想为文件中的数字分配存储空间,而不是将它们存储在列表中,然后求出数字的平均值。我已经为下面的列表做了这个,但我正在为一个指针做这个的概念而苦苦挣扎。感谢您的帮助。

最佳答案

您需要克服的主要问题是确定要分配多少内存来容纳所有 double 。有几种方法可以做到这一点:

“最简单”的方法是做一些天真的事情,比如完全读取文件一次以获得 double ,然后再次读取文件以实际将值存储在数组中:

std::ifstream in("numbers.txt");
unsigned int numElements = 0;

// Read the file once to determine how many elements it contains
double discard;
while (in >> discard) {
numElements++;
}

// Go back to the beginning of file
in.clear() ;
in.seekg(0, std::ios::beg);

// Allocate array and read file contents into it
double* data = new double[numElements];
for ( int i = 0; i < numElements && is >> data[i]; i++ );

// Calculate the sum and average
double sum = 0;
for ( int i = 0; i < numElements; i++ ) {
sum += data[i];
}

double average = sum / numElements;

// Free the dynanmically allocated memory
delete[] data;

读取一个文件两次是非常低效的;还有其他方法可以预先获取大小。例如,您可以在输入文件中约定将元素数量作为数据之前的第一个值:

[infile.txt]
5 1.0 2.0 3.0 4.0 5.0

现在您可以从文件中读取第一个值,并且您会知道该文件的其余部分包含 5 个 double 。使用 new 分配您的数组(类似于上面的示例),然后继续将文件的其余部分读入其中。

另一种选择是做 std::vector 所做的事情,首先是在数组中为 1 个元素分配足够的内存。如果您需要添加另一个元素,并且数组已经满了,请使用两倍的内存重新分配您的数组,并将旧元素复制/移动到它。根据需要重复。

关于c++ - 使用指针为文件 C++ 中的数字动态分配存储空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com