如何从文件中读取并动态分配int数组

时间:2013-08-09 13:20:18

标签: c++ arrays visual-c++

我需要阅读一些包含大量数字(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 个答案:

答案 0 :(得分:4)

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

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

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

    ifstream fin("inputfile");

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

    return 0;
}

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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

vector使用相同的逻辑。

答案 3 :(得分:1)

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