0

新鮮な目が、自分が間違っていることを見つけるのに役立つことを願っています. 特定のintの配列を検索しようとしていますが、それが見つかると、それを削除し、残りの要素をシフトして「削除」の場所を埋めます。

これは、A.remove(25) のようなクラス obj で使用されます。この場合、obj A には、Num (配列内の要素の数)、Cap (配列の合計容量)、Pool[] (配列の合計容量) などの変数が含まれます。すべての数字が含まれています)。

bool Set::remove(int X)
{
        for(unsigned J=0; J<Num; J++)
        {
                if(Pool[J] == X)
                {
                        for(unsigned Z=J; J<Num; Z++)
                        {
                                if(Z == (Num-1))
                                {
                                        Pool[Z] = NULL;
                                }
                                else
                                {
                                        Pool[Z] = Pool[Z+1];
                                }
                        }
                        return true;
                }
        }
        return false;
}
4

1 に答える 1

4

内側の for ループで:

for(unsigned Z=J; J<Num; Z++)

ループ条件は、次Z<Numの代わりにする必要がありJ<Numます。

for(unsigned Z=J; Z<Num; Z++)

それ以外の場合J<Numは true に評価され続けZ、範囲外になるまでインクリメントされます。Pool

于 2012-11-01T15:33:43.777 に答える