4

初心者として、リストクラスを使用して、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 ファイルに実装しました。

誰にも提案はありますか?

4

3 に答える 3

13

list1.pop_front()を呼び出すと、イテレータが最初に指している要素が削除され、無効になります。また、無効なイテレータはインクリメントできません。:)

デバッガーで見つけるのに数分かかりました。プログラムをステップスルーするときは、「it」の値に注意してください。デバッガーの使い方をまだ知っているかどうかはわかりませんが、知らない場合は、ぜひご利用ください。それはかけがえのないツールです。

(ちなみに、今後はコンパイル時とプログラム実行時のどちらでエラーが発生するのかを明確にしてください。「プログラムのコンパイル」時にエラーが発生したとのことでした。編集したばかりですので、よろしくお願いします。気にしないでください。しかし、これは重要な違いであり、質問に正確に答えることが難しくなります)

于 2008-12-02T19:34:15.737 に答える
0

また、print()の呼び出しをコメントアウトし、最初に以下を追加した後、投稿されたコードをVS2008でコンパイルすることもできました。

#include <list>
using namespace std;
于 2008-12-02T19:30:57.507 に答える
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キーを押す)、リストイテレータがインクリメントできないというポップアップが表示されます。

于 2008-12-02T19:33:55.423 に答える