2008-12-02 3 views
4

Как новичок, я пытаюсь реализовать функцию сортировки в C++, используя класс list. Однако, запустив код, я получаю сообщение об ошибке, что итератор списка не увеличивается ... Однако это кажется очень маловероятным, поскольку он должен быть инкрементальным!Перечислить сообщение об ошибке без инкрементного сообщения в 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); 
} 

Я реализовал эту функцию только в де CPP файле, под основным.

Есть ли у кого-нибудь предложения?

+0

Предполагая, что jalf прав, могу ли я просто сказать, что я понял, «компилируя код, я получаю ошибку. .. "означает, что вы получили ошибку компилятора, а не то, что она скомпилирована, но затем вы получили сообщение об ошибке при запуске. – 2008-12-02 19:37:10

+0

Изменен «компиляция кода» на «запуск кода». Я получил ту же ошибку, когда * запускал свой код в VS2k8. VS выполняет множество дополнительных проверок и ограничений - проверка по итераторам по умолчанию, что и выводит ошибку, с которой он столкнулся. – jalf 2008-12-02 19:39:40

ответ

0

Я также был в состоянии скомпилировать отправил код с VS2008 после того как я закомментирована вызовов для печати() и добавил следующее к началу:

#include <list> 
using namespace std; 
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, а именно: если я его отладки (нажмите F5 в VC++ 2008) Я получаю всплывающее окно, что список итератор не incrementable

13

Ваш призыв к list1.pop_front() удаляет эл который итератор указывает на изначально, недействительным. И недопустимый итератор не может быть увеличен. :)

Потребовалось несколько минут, чтобы найти с помощью отладчика. Просто следите за значением «it» при прохождении программы. Я не знаю, знаете ли вы, как использовать отладчик, но если нет, сделайте себе одолжение и узнайте об этом. Это бесценный инструмент.

(Кстати, в будущем, пожалуйста, указывайте, произошла ли ошибка во время компиляции или во время запуска программы. В вашем заявлении указана ошибка, возникшая при компиляции программы. вы, надеюсь, вы не против, но это важное различие, и это затрудняет ответ на ваш вопрос точно)

 Смежные вопросы

  • Нет связанных вопросов^_^