1

我需要阅读一些包含大量数字(int)的文件。每个文件的行都是不同的。

1
3
5
2
1
3
2

我必须读取其中一个文件并动态创建一个 int 数组。我将读取文件两次,因为我无法知道文件的长度。你知道另一种方法吗?这就是我所做的:

int main()
{
    int *array;
    int tmp, count;

    ifstream fin("inputfile");

    while(fin >> tmp)
        count++;

    array = new int[count];

    fin.close();
    fin.open("inputfile");
    int i=0;
    while(fin >> tmp)
        array[i++]=tmp;

    delete[] array;
    return 0;
}

谢谢你的帮助。

4

4 回答 4

4

使用std::vector而不是原始数组。

这样,您可以在读取每个项目时添加到向量中,而不必读取文件一次以计算文件中有多少项目,然后再次填充数组。

int main()
{
    std::vector<int> data;
    int tmp;

    ifstream fin("inputfile");

    while(fin >> tmp)
    {
        data.push_back(tmp)
    }

    return 0;
}
于 2013-08-09T13:25:39.980 回答
2

这是将数字从文件读入的惯用方法std::vector<int>

#include <iostream>
#include <iterator>
#include <fstream>
#include <vector>

int main()
{
  std::ifstream is("inputfile");
  std::istream_iterator<int> start(is), end;
  std::vector<int> numbers(start, end);
  std::cout << "Read " << numbers.size() << " numbers" << std::endl;
}
于 2013-08-09T13:29:45.733 回答
1

如果你不想使用 std::vector,你可以在 while 循环中添加一个计数,如果它达到数组的上限,重新分配另一个 size*2 的缓冲区并将数据复制到它,然后开始读取文件。

矢量使用相同的逻辑。

于 2013-08-09T13:30:10.790 回答
1

如果所有文件的一行中的int数相同,则可以通过计算文件的大小来获得文件的行数,然后该文件的行数等于size(file)/(n*sizeof (int)),n 是每行的 int 数。我认为您可以尝试而不是两次读取文件。

于 2013-08-09T13:35:30.257 回答