C++:无法从大的txt文件中读取
C++ : Unable to read from large txt file
我是c++的新手。。我为mergesort算法写了一个代码。我的问题是我想从一个txt文件中读取100000个整数作为输入,我用较小的输入尝试了我的代码,它成功了。但当我使用大文件时,它会被停止。我使用向量来动态分配内存。我使用了长数据类型,这有什么错误吗?我的代码:
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
#include<conio.h>
void merge(vector<long> &,long ,long , long );
void divide(vector<long> &arr,long min, long max){
long mid;
if(min<max){
mid=(min+max)/2;
divide(arr,min,mid);
divide(arr,mid+1,max);
merge(arr,min,mid,max);
}
return;
}
void merge(vector<long> &arr,long min, long mid,long max){
long i,j,k;
long c[30];
i=min,j=mid+1;
k=min;
while(i<=mid && j<=max){
if(arr[i]<arr[j]){
c[k]=arr[i];
i++;
k++;
}
else{
c[k]=arr[j];
j++;
k++;
}
}
while(i<=mid){
c[k]=arr[i];
i++;
k++;
}
while(j<=max){
c[k]=arr[j];
j++;
k++;
}
for(long i=min;i<k;i++)
arr[i]=c[i];
}
int main(){
vector<long> data;
long tmp;
long count=0;
ifstream fin("sample2.txt");
while(fin >> tmp)
{
data.push_back(tmp);
count++;
}
divide(data,0,count);
cout<<"the sorted array is";
for(long i=0;i<count;i++)
cout<<data[i]<<"n";
getch();
return 0;
}
您的问题在于合并函数:
你超过了局部变量c.
long c[30];
也许还有更多的问题,这是我第一次注意到的。
编辑
试试这个:找出差异。。。
#include <map>
#include <vector>
#include <fstream>
#include <iostream>
#include <time.h>
using namespace std;
void merge(vector<long> &,long ,long , long );
void divide(vector<long> &arr,long min, long max){
long mid;
if(min<max){
mid=(min+max)/2;
if(min != mid) divide(arr,min,mid);
if(max != mid+1) divide(arr,mid+1,max);
merge(arr,min,mid,max);
}
return;
}
void merge(vector<long> &arr,long min, long mid,long max){
long i,j,k;
map<long,long> c; //uses map because the vector not always start from 0
//other option is to use vector<long> c(max-min) and substruct min when copy to/from it.
//like this: vector<long> c(1+max-min); //initialize size = max-min+1
// c[k-min] = arr[i];
// arr[i] = c[i-min];
i=min,j=mid+1;
k=min;
while(i<=mid && j<=max){
if(arr[i]<arr[j]){
c[k]=arr[i];
i++;
k++;
}
else{
c[k]=arr[j];
j++;
k++;
}
}
while(i<=mid){
c[k]=arr[i];
i++;
k++;
}
while(j<=max){
c[k]=arr[j];
j++;
k++;
}
for(long i=min;i<=max;i++)
arr[i]=c[i];
}
void create_input(int i){
srand(time(NULL));
ofstream fout("sample2.txt");
while(i--){
fout<<rand()<<" ";
}
}
int main(){
vector<long> data;
long tmp;
long count=0;
//create random input
//create_input(31);
ifstream fin("sample2.txt");
while(fin >> tmp)
{
data.push_back(tmp);
count++;//count = data.size(); !!
}
cout<<"the unsorted array isn";
for(long i=0;i<count;i++)
cout<<i<<"]t"<<data[i]<<"n";
divide(data,0,count-1);//use last index not size
cout<<"the sorted array isn";
for(long i=0;i<count;i++)
cout<<i<<"]t"<<data[i]<<"n";
return 0;
}
您的程序导致堆栈溢出
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 无法打开.txt文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 使用fstream对txt文件中的数字进行循环
- Visual Studio在尝试读取resource.txt文件时崩溃
- 如何从txt文件中读取多个不同长度的数组?
- 在一次迭代中从 txt 文件中读取多行
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 写入超过 1GB 的.txt文件时出现奇怪的行为
- 视觉 如何循环访问C++中遵循类似格式的多个.txt文件?
- txt 文件中浮点数的最大和最小值
- 从.txt文件中读取浮点型数字并在公式中使用它们
- C++将文本从.txt文件解析为变量
- 在树结构.txt文件中搜索节点
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 在 txt 文件中显示前两个数字的程序
- 如何从具有两列的.txt文件创建并行数组?
- 如何使用c ++读取带有非英文字母的*.txt文件?(国际化)
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 如何读取 TXT 文件并仅将 int 存储在 C 中