我正在尝试使用递归函数对向量中的整数进行排序。我的程序运行、编译和排序数据,但事后它给了我一个段错误。我认为这是因为 for 循环使用了向量中已更改的地址,导致它永远不会离开循环。
void Plays::SortRelevance(vector<Plays> list){
cout << "in the loop" << endl;
for(vector<Plays>::iterator i=list.begin(); i != list.end(); ++i){
cout << i->relevance << endl;
}
for(vector<Plays>::iterator i=list.begin(); i != list.end(); ++i){
if(i->relevance < (i+1)->relevance){
cout << "IN THE THINGY WAT" << endl;
Plays temp(*i);
list.erase (i);
list.push_back (temp);
SortRelevance(list);
cout << "left recursive" << endl;
}
cout << "stuck?" << endl;
}
cout << "left the loop" << endl;
for(vector<Plays>::iterator i=list.begin(); i != list.end(); ++i){
cout << i->relevance << endl;
}
}
我的输出结束如下,排序但最后给出了段错误:
IN THE THINGY WAT
in the loop
-62
-62
-62
-69
-71
-72
-80
-81
-87
-89
-94
-100
-104
-107
-107
-112
-137
-142
-145
-150
-151
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
stuck?
Segmentation fault
提前感谢任何可以为我阐明这一点的人。
编辑:我还没有解决这个问题,因为我找到了一种更好、更优雅的方法来解决这个问题。我创建了一个类,重载了运算符,然后使用 sort() 函数对我需要做的事情进行排序。