我有一个动态分配的数组:
myRectangle lastRectanglesArray = new myRectangle[lastMaxLabel];
我想通过这个阵列中的所有元素循环和消除这些能够满足我的条件(例如过大的矩形)。
我一直在想,我可以通过这个数组循环,并得到一个能够满足我的条件,然后分配一个新的数组元素的数量。 但我怎么能“转让”这些“想”元素融入到我的新阵?
只是为了记录:我不能使用STL容器。
我有一个动态分配的数组:
myRectangle lastRectanglesArray = new myRectangle[lastMaxLabel];
我想通过这个阵列中的所有元素循环和消除这些能够满足我的条件(例如过大的矩形)。
我一直在想,我可以通过这个数组循环,并得到一个能够满足我的条件,然后分配一个新的数组元素的数量。 但我怎么能“转让”这些“想”元素融入到我的新阵?
只是为了记录:我不能使用STL容器。
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.
只是移动下一个阵列位置上需要被删除的一个,并且离了阵列的上端移动的一切。
你看像使用链表的完美情况。 然而,你将不得不废除与new myRectangle[lastMaxLabel]
一部分,你就必须实现它作为您的PERT Insert()
函数。
这样,您就不需要到想要的元素转移到一个新的数组,而只是删除不需要的元素。
您的使用情况更多的光将有助于我们更好地思考替代品。
我同意迈克尔知念 -使用std ::向量来代替。 你会避免很多其他潜在的问题这样。 如果你真的想使用动态数组,看这个问题: 删除数组元素和移位,其余的
如果有在阵列数据的一个大的量,这将是用于使用循环移位的问题
也许你应该建立自己的阵列管理类(查找,添加,deleteAt等)。
我的建议使用链表节点的方法..它会更快而不是使用循环进行变速。