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++中如果需要动态数组,最简单最明显的选择就是我们std::vector

于 2013-01-26T06:28:55.967 回答