如何删除动态分配的数组元素?(How to remove elements from dynamic

2019-09-28 20:05发布

我有一个动态分配的数组:

myRectangle lastRectanglesArray = new myRectangle[lastMaxLabel];

我想通过这个阵列中的所有元素循环和消除这些能够满足我的条件(例如过大的矩形)。

我一直在想,我可以通过这个数组循环,并得到一个能够满足我的条件,然后分配一个新的数组元素的数量。 但我怎么能“转让”这些“想”元素融入到我的新阵?

只是为了记录:我不能使用STL容器。

Answer 1:

myRectangle * lastRectanglesArray = new myRectangle[lastMaxLabel];
// initialize the entries in the lastRectanglesArray

// create a temporary array which contains info about each individual
// entry. namely, it only holds info about whether the entry should
// be kept, or deleted.
// we also use the 'entries' value, which is the number of entries
// in the new array
bool * entriesToKeep = new bool[lastMaxLabel];
int entries = 0;

// check each entry, and mark whether it should be kept or deleted
for (int i = 0; i != lastMaxLabel; ++i) {
    // check whether the entry should be kept or deleted...
    // here, i just put a function with signature like:
    // bool shouldKeepRectangle(const myRectangle &);
    entriesToKeep[i] = shouldKeepRectangle(lastRectanglesArray[i]);
    if (entriesToKeep[i]) ++entries;
}

// create a new array that will contain the entries that should be kept
myRectangle * rectanglesArray = new myRectangle[entries];

// assign the entries in the new array
for (int i = 0, j = 0; i != lastMaxLabel && j != entries; ++i) {
    if (entriesToKeep[i])
        rectanglesArray[j++] = lastRectanglesArray[i];
}

// free the memory held by the temp array
delete [] entriesToKeep;

// if the old array is not needed anymore, delete it
delete [] lastRectanglesArray;

// and here you have rectanglesArray, a brand new array that contains
// only the elements that you need.


Answer 2:

只是移动下一个阵列位置上需要被删除的一个,并且离了阵列的上端移动的一切。



Answer 3:

你看像使用链表的完美情况。 然而,你将不得不废除与new myRectangle[lastMaxLabel]一部分,你就必须实现它作为您的PERT Insert()函数。

这样,您就不需要到想要的元素转移到一个新的数组,而只是删除不需要的元素。

您的使用情况更多的光将有助于我们更好地思考替代品。



Answer 4:

我同意迈克尔知念 -使用std ::向量来代替。 你会避免很多其他潜在的问题这样。 如果你真的想使用动态数组,看这个问题: 删除数组元素和移位,其余的



Answer 5:

如果有在阵列数据的一个大的量,这将是用于使用循环移位的问题

也许你应该建立自己的阵列管理类(查找,添加,deleteAt等)。

我的建议使用链表节点的方法..它会更快而不是使用循环进行变速。



文章来源: How to remove elements from dynamically allocated array?