C ++将数组调整为较小的大小,保持同名删除数组中的旧位置

时间:2014-06-12 07:55:56

标签: c++ arrays memory resize

我有一个空间对象数组(我的东西),我需要减少但保持相同的名称才能处理一些碰撞。我将我的阵列设置为:

ufo** ufoAr = new ufo*[numberOfUfos];
for (int i=0; i<numberOfUfos; i++) {
    ufoAr[i] = new ufo(randomIntBetween(1630, 70), randomIntBetween(860, 45));
}

当我检测到碰撞时,我想用两个以下的数据调整我的数组大小并删除两个特定的数组元素。像这里:

//look through all the ufoAr[]
for (int i=0; i<numberOfUfos; i++) {
    //look through ufoAr[] again to see other objects
    for(int j=0; j<10; j++) {
        //if the same
        if (i==j){ continue; }
    else {
            //find a collision
        if(ufoAr[i]->collision(ufoAr[j]->sp)) {
                //Array::Resize(ufoAr, numberOfUfos-2);         
                //numberOfUfos = numberOfUfos - 2;
            // ------ TRY TO RESIZE ARRAY TO -2 BUT SAME NAME WITHOUT iTH AND jTH ELEM
                ufoAlive[i] = false;
            ufoAlive[j] = false;
        }
        }
    }
}

我非常感谢有关调整阵列大小的任何帮助,谢谢先进。我真的很挣扎,需要另一种意见。感谢

杰克

2 个答案:

答案 0 :(得分:0)

为此,您需要首先创建一个新阵列,例如

ufo** ufoArTmp = new ufo*[numberOfUfos-2];

然后将ufoAr的内容[您要保留]复制到ufoArTmp。完成后,您执行delete [] ufoAr,最后ufoAr = ufoArTmp;更新原始指针。此时不要删除ufoArTmp,因为它与ufoAr中的值相同,并且您希望保留该值,正确。

当你开始...... {)时,显然要特别注意numberOfUfos小于2;

编辑,阅读其他代码:

不要这样做:

    if (i==j){ continue; }
else {

好多了:

 if (i!=j) {

答案 1 :(得分:0)

最简单的方法是使用std :: vector并让它为你处理调整大小。

cplusplus.com reference

cppreference page