0

クラスオブジェクトにある配列にintを挿入しようとしていますが、何が間違っているのか理解できません。私のコードの現在の状態では、intが配列に挿入されることはありません。

基本的に私がやろうとしているのは、insert(int)を呼び出すと、配列にスペースが残っているかどうかを確認し、ある場合はそれを追加します。そうでない場合は、さらに8つのスペースで再割り当てします。配列。

ここにいくつかの関連するクラス情報があります

private:

    unsigned Cap;    // Current capacity of the set
    unsigned Num;    // Current count of items in the set
    int * Pool;      // Pointer to array holding the items

  public:

    // Return information about the set
    //
    bool is_empty() const { return Num == 0; }
    unsigned size() const { return Num; }
    unsigned capacity() const { return Cap; }

    // Initialize the set to empty
    //
    Set()
    {
      Cap = Num = 0;
      Pool = NULL;
    }

これが私が取り組んでいるコードです

bool Set::insert(int X)
{
        bool Flag = false;
        if (Num == Cap)
        {
                //reallocate
                const unsigned Inc = 8;

                int * Temp = new int[Cap+Inc];

                for (unsigned J=0;J<Num;J++)
                {
                        Temp[J] = Pool[J];
                }

                delete [] Pool;
                Pool = Temp;
                Cap = Cap+Inc;
        }

        if(Num < Cap)
        {
                Pool[Num+1] = X;

                Flag = true;
        }
        return Flag;
}
4

2 に答える 2

3

insert関数が更新されることはありませんNum。試してみてくださいPool[Num++] = X;

于 2012-10-31T21:53:45.167 に答える
0

要素の数を増やしたいと思うかもしれませんが、新しい要素をコピーした後でのみ、最初の要素のインデックスは0である必要があります。基本的に、insert()関数は次のようになります。

bool Set::insert(int X)
{
    if (Num == Cap)
    {
        const unsigned Inc(std::max(8, 2 * Cap));
        std::unique_ptr<int[]> Temp(new int[Cap+Inc]);
        std::copy(Pool.get(), Pool.get() + Num, Temp.get());
        Pool.swap(Temp);
        Cap += Inc;
    }
    Pool[Num] = X;
    ++Num;

    return true;
}

もちろん、これは、Poolが合理的に宣言されていることを前提としていstd::unique_ptr<int[]>ます(または、必要に応じて簡単に記述できる同様の機能を備えたもの)。std::unique_ptr<int[]>生のポインタではなく使用する理由は、リソースが破棄されたときにリソースを自動的にクリーンアップするためです。intsのシーケンスをコピーしても例外はスローされませんが、getがまたはテンプレートパラメーターにint置き換えられた場合、例外がスローされる可能性があります。std::string

于 2012-10-31T21:56:45.520 に答える