将数组大小调整为较小的大小,保留相同的名称,删除数组中旧的位置
C++ resize array to smaller size keep same name delete old place in array
我有一个空间对象数组(我的东西),我需要减少,但保持相同的名称,以处理一些碰撞。我将数组设置为:
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.comcppreference页
相关文章:
- 将数组的地址分配给变量并删除
- 你能帮我解决删除数组 c++ 中重复值的挑战吗?
- 如何在C++中删除静态数组?
- 删除指针数组 (C++) 中的元素
- 删除动态数组时未定义标识符
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++数组删除的例外
- C++:指向对象的指针数组 - 删除元素时程序崩溃>
- 你如何打印出使用数组删除某些字符的回文
- 类数组 - 删除操作
- 何时从数组删除类指针
- 从自定义数据类型向量数组C 删除
- 动态数组删除
- 动态数组C++(删除)
- 动态数组删除旧指针并将其设置为新数组C++
- C++ 字符数组删除重复字符
- 使用数组删除记录
- 数组删除导致EXC_BAD_ACCESS错误
- 为什么常规删除运算符在需要数组删除运算符时起作用
- 智能指针数组删除器