如何从类中复制数组并将新数组的大小加倍?

时间:2016-01-17 20:37:21

标签: c++ arrays copying

CDCatalogue::CDCatalogue() //creates array of size 4
{
    maxsize=4;
    numcds = 0;
    cds = new CD[maxsize];
}

我希望将cat复制到一个大小为cat的新数组中:

CDCatalogue::CDCatalogue(const CDCatalogue& cat)
{


}

1 个答案:

答案 0 :(得分:0)

如前所述,我更喜欢使用std :: vector,它提供了resize()成员函数,以满足您的需求。这可能就是你要找的东西。

如果由于某种原因你不能使用向量,可能比使用"倍增复制构造函数更简单的方法"将有一个功能' doubleSize'你可以在构造复制后立即调用。

假设在你的问题中的例子中,maxsize和cds被声明为类成员,你可以这样做:

CDCatalogue::doubleSize() {
    unsigned int oldMaxSize = maxsize; 
    maxsize *= 2;  // You might want to keep an eye for overflows here
    CD *oldCds = cds;
    cds = (CD*) new CD[maxsize];
    std::copy(oldCds, oldCds+oldMaxSize, cds);
    delete[] cds;
}

请注意,这并不像使用向量那么简单,因为没有" resize"用于c ++动态分配。相反,您必须创建一个新的所需大小的数组,将旧数组的元素复制到新数组中,然后释放旧数组的内存。请注意,新数组的后半部分元素将初始化为未定义的值。