我想使用合并排序对文本文件进行排序。我正在使用vector来处理文本文件。这个程序正在正确编译,但是当我运行它时,它显示了分段错误(核心转储)错误。我尝试过很多东西,但都是徒劳的。任何人都可以帮助我。提前谢谢。
vector<string> sV;
void merge(vector<string> & sV, int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
vector<string> sV1;
vector<string> sV2;
for (i = 0; i < n1; i++)
sV1[i] = sV[l+1];
for (j = 0; j < n2; j++)
sV2[j] = sV[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2)
{
if (sV1[i] <= sV2[j])
{
sV[k] = sV1[i];
i++;
}
else
{
sV[k] = sV2[j];
j++;
}
k++;
}
while (i < n1)
{
sV[k] = sV1[i];
i++;
k++;
}
while (j < n2)
{
sV[k] = sV2[j];
j++;
k++;
}
}
void mergeSort(vector<string> & sV, int l, int r)
{
if (l < r)
{
int m = l+(r-l)/2;
mergeSort(sV, l, m);
mergeSort(sV, m+1, r);
merge(sV, l, m, r);
}
}
int main()
{
string word;
char ch, ch1;
ifstream tin("a1.txt");
ofstream outp("out.txt");
if(!tin.is_open())
cout << "Unable to open file :) \n";
while(tin >> word)
sV.push_back(word);
mergeSort(sV, 0, sV.size() - 1);
for (size_t i = 0; i < sV.size(); i++) {
outp<< sV[i] << " ";
}
return 0;
}
答案 0 :(得分:1)
你不能只创建一个矢量并像数组一样分配一个值。你需要先调用vector :: push_back()来增加大小。
完成后,您可以使用下标[]
访问该成员