您好我正在尝试做这样的事情:
在第一次迭代时说我有
A={2,3,5}
然后在第二次迭代中变为
A={2,3}
等等。我尝试在第一次迭代后将第三个元素设为零,但算法出错了。
在我们执行每次迭代时,C ++中删除数组中元素的方式是什么?
答案 0 :(得分:3)
最好的(也是大多数类似C ++的)方法是从数组切换到可调整大小的容器,例如std::vector
。此容器动态调整大小,允许您从末尾或容器中的任何其他位置删除元素。然后容器会调整到正确的大小。
// Create a vector
std::vector<int> mydata(10, -1);
for (int i = 0 ; i != 10 ; i++)
mydata[i] = i;
// Process all elements
for (int i = 0 ; i != mydata.size() ; i++) {
cout << mydata[i] << endl;
}
// Remove the last element
mydata.pop_back();
// Process all elements - now the last one is not there
for (int i = 0 ; i != mydata.size() ; i++) {
cout << mydata[i] << endl;
}
答案 1 :(得分:0)
您无法在C ++中删除常规数组中的元素。如果您正在使用List或vector,那么它是另一回事,但是对于普通数组,您只能创建新数组,并从旧数组中复制没有值的值,您想要&#34;删除&#34;。然后说&#34; new array&#34;是&#34;旧阵列&#34;。
答案 2 :(得分:0)
对于C ++样式:使用std:vector并跟随this 对于C风格:使用动态堆数组,即new / delete / realloc
答案 3 :(得分:0)
将阵列描绘为带有插槽的金属结构。插槽无法更改,它们是固定的。
用书籍填充插槽。这就像将值放在数组中一样。
从第3个插槽中删除第3本书。因为它是具有固定槽的金属结构,所以没有其他书被调整或移动。他们处于原来的位置。
要“移除”空插槽,请从下一个插槽中取出一本书并放入空插槽中。重复,直到“空”插槽结束或所有剩余的书籍都已移动。这是std::vector
删除项目的方式。
链接列表在删除插槽方面效率更高。可以将链表视为一堆容器,这些容器的一端是钩子,另一端是字符串。您只能将字符串绑定到一个容器的钩子上。在字符串后面给出了容器的顺序。要删除容器,请解开前一个容器的字符串并将其绑定到下一个容器的挂钩,然后解开容器的字符串。您无需复制或移动任何剩余元素;你刚刚移动了字符串。
除非您跟踪已移除的容器,否则它可能会丢失。这种情况称为内存泄漏:内存中丢失的项目。