简而言之:我的c ++编程技巧和术语充其量只是中级。所以请温柔;)。
我正在为大学课程开发一种多排序算法。最初,我构建了一个包含20个整数数组的程序,因为它与.txt文件一样大。最后的实验室现在要求接收具有10,100,1000,10000,100000和1000000个不同数字的文件。我最初在for循环中使用ifstream来读取整数。现在我需要从文件中读取可变数量的int,我遇到了这段代码的问题。我已经广泛搜索了这个网站和谷歌找到这个问题的答案。我已经尝试了几十种不同的代码片段,但无济于事。这是我目前运行的代码,可以运行20个整数。
int i;
int A[20];
int length;
char unsortedFilename[200];
ifstream unsorted;
cout << "Please type the full name of the file you would like sorted.\n* ";
cin >> unsortedFilename;
unsorted.open(unsortedFilename);
length = (sizeof(A) / sizeof(*A));
for( i = 0; i < length; i++ )
{
unsorted >> A[i];
cout << A[i] << "\n";
}
insertionSort();
我确实有其他代码混合在那里,但它是错误检查,选择重复数字删除等。我希望它这样的代码将运行“i”次,其中“i”实际上是文件中的整数。另外,正如我之前提到的,我需要输入一个包含1,000,000个数字的文件。我不相信int数组能够容纳那么多数字。它会像把所有的东西交换成多头一样容易吗?
感谢您提供的任何帮助。
答案 0 :(得分:1)
根据评论中的建议,使用std::vector<int>
代替数组。
使用for
循环代替while
循环。当没有数字可供阅读时,突破while
循环。
while
循环:
std::vector<int> A;
int item;
while ( unsorted >> item )
{
A.push_back(item);
}
您可以使用std::vector
对std::vector::iterator
进行排序,或只是通过int*
返回的A.data()
访问数据。
答案 1 :(得分:1)
您可以简单地将所有数字读入矢量。然后像使用数组一样使用向量。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
int main()
{
std::string unsortedFilename;
std::cout << "Please type the full name of the file you would like sorted.\n";
std::cin >> unsortedFilename;
std::ifstream is(unsortedFilename);
std::istream_iterator<int> start(is), end;
std::vector<int> A(start, end);
std::cout << "Read " << A.size() << " numbers" << std::endl;
}
答案 2 :(得分:0)
需要输入一个包含1,000,000个数字的文件。我不相信int数组能够容纳那么多数字。
当然可以。 1百万英寸是大约4Mb的内存,这是一个微不足道的数量。您甚至可以像现在一样int A[1000000];
将其声明为静态。
但真正的问题是你在代码中假定一个固定的长度,而不是从输入中确定长度。我想这就是你的任务所教你的,所以我不会告诉你解决方案。但是考虑使用ifstream::eof
并使你的排序接受长度作为参数......
答案 3 :(得分:0)
你想要的是一个载体。
试试这个,
int i;
vector<int> A;
int length;
string unsortedFilename;
ifstream unsorted;
cout << "Please type the full name of the file you would like sorted.\n* ";
cin >> unsortedFilename;
unsorted.open(unsortedFilename);
int temp;
for( i = 0; unsorted >> temp; i++ )
{
A.push_back(temp);
cout << A[i] << "\n";
}
insertionSort();
矢量基本上是一个动态数组。它会随着需要更多空间而自动增长。这样,如果您拥有10个,100个甚至100000个项目并不重要,它会自动为您增长。
还使用字符串作为文件名,某些文件名超过200个字符。
祝你好运!