作为一个新手,我正在尝试使用list-class在C ++中实现排序功能。 但是,运行代码我得到的错误是列表迭代器不可递增...但是它似乎不太可能,因为它应该是可递增的!
代码:
void shuffle (list<int> &list1)
{
list<int> smaller;
list<int> larger;
if (list1.size() > 1)
{
list<int>::iterator it;
//int it;
int x = list1.front();
for (it = list1.begin(); it != list1.end(); it++)
{
if(*it <= x)
{
smaller.push_front(*it);
list1.pop_front();
}
else
{
larger.push_back(*it);
list1.pop_front();
}
shuffle (smaller);
shuffle (larger);
}
}
else
{
print(smaller);
print(larger);
//cout << "No sorting needed! The list still looks like: ";
//print(list1);
}
print(smaller);
print(larger);
}
我在de CPP文件中,在main。
下实现了这个功能有没有人有任何建议?
答案 0 :(得分:13)
您对list1.pop_front()的调用会删除迭代器最初指向的元素,使其无效。无效的迭代器无法递增。 :)
使用调试器找了几分钟。当你逐步完成程序时,请注意'它'的价值。我不知道你是否知道如何使用调试器,但如果没有,请自己帮忙并学习它。这是一个非常宝贵的工具。
(顺便说一下,将来,请明确说明错误是在编译时还是在运行程序时发生的。你的问题说明了“编译程序”时发生的错误。我刚刚为你编辑了这个问题,希望你不介意。但这是一个重要的区别,并使你更难准确回答你的问题)
答案 1 :(得分:0)
在我注释掉print()的调用并将以下内容添加到开头之后,我还能够使用VS2008编译已发布的代码:
#include <list>
using namespace std;
答案 2 :(得分:0)
这是我的主要内容:
> int _tmain(int argc, _TCHAR* argv[])
{
//DEFINE LIST
list <int> list1;
//FILL LIST
list1.push_front(5);
list1.push_front(2);
list1.push_front(1);
list1.push_front(9);
list1.push_front(12);
list1.push_front(3);
list1.push_front(4);
//PRINT LIST BEFORE SORTING
print(list1);
//SORT LIST
shuffle(list1);
//PRINT AFTER SORTING
system("pause");
return 0;
错误消息只有1,即如果我调试它(在VC ++ 2008中按F5)我得到一个弹出窗口,列表迭代器不可递增