我需要阅读一些包含大量数字(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;
}
感谢您的帮助。
答案 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数。我想你可以尝试两次而不是阅读文件。