将数组大小调整为较小的大小,保留相同的名称,删除数组中旧的位置

C++ resize array to smaller size keep same name delete old place in array

本文关键字:数组 删除 位置 调整 保留      更新时间:2023-10-16

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

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;
        }
        }
    }
}

我将非常感谢任何帮助调整数组的大小,提前感谢。我真的很纠结,需要别人的意见。由于

杰克

为此,您需要首先创建一个新数组,例如

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

然后将ufoAr的内容复制到ufoArTmp中。完成后,执行delete [] ufoAr,最后执行ufoAr = ufoArTmp;来更新原始指针。不要删除ufoArTmp在这一点上,因为它是相同的值,现在在ufoAr,你想保持它,对吧。

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

编辑,在读取其他代码时:

不要这样做:

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

更好:

 if (i!=j) {

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

参考cplusplus.com

cppreference页