0

ある構造体の配列とその配列へのポインタを含むクラスがあるとしましょう。

struct Box {
    //stuff
};
class Foo {
    private:
        Box *boxPtr     //pointer to an array of Box structs
        int max;        //the size of the partially filled array
        int boxCounter; //the current number of non-NULL elements in the array
    public:
        Foo();                //constructor
        Foo(const Foo &obj);  //copy constructor
        ~Foo();               //destructor
        bool newBoxInsert(Box newBox){
            //adds another Box to my array of Box structs
            boxCounter++;
        }
        //etc
};

そして、私のint main()で、どういうわけか、クラスFooのまったく新しいオブジェクトを作成する必要があります。ポインタがboxPtrである、サイズが不確定な配列を部分的に埋める必要があります。

その配列を初期化するにはどうすればよいですか?コンストラクターはそれを行う必要がありますか?または、newBoxInsertに処理させる必要がありますか?

どちらの場合でも、どうすればそれを達成できますか?配列を動的に割り当てる必要があると思います。その場合は、ポインタをクラスメンバーとして持つのが良いでしょう...そうですか?

たとえば、最初の要素を配列に追加する場合、次を使用する必要があります

boxCounter = 1;
boxPtr = new Box[boxCounter]; 

次に、配列に要素を追加し続けますか?

おそらく、これはベクトルを使用した方がよいでしょう。要素を追加するとき、それらははるかに...柔軟性があります(?)。ベクトルに構造体を要素として含めることはできますか?

[/ n00b]

4

1 に答える 1

2
private:
        Box *boxPtr 

これを次のように置き換えます。

private:
        std::vector<Box> mbox;

手動のメモリ管理をすべて省くことができます。そして、あなたは間違いを犯す可能性が低くなります。
はい、std::vector要素として構造体を含めることができます。実際、これはテンプレート クラスであるため、任意のデータ型を格納できます。

C++ で動的配列が必要な場合、最も単純で明白な選択 us std::vector.

于 2013-01-26T06:28:55.967 に答える