例如,如果我们在 python 中有一个数组arr = [1,3,4]
。arr.remove(element)
我们可以通过使用ot来删除数组中的元素,arr.pop()
并且 list 会发生变异,它的长度会发生变化,并且该元素将不存在。有没有办法做到这一点是C ot C++?如果是,该怎么做?
问问题
2056 次
4 回答
5
我猜您正在寻找std::vector
(或标准库中的其他容器)。
于 2013-01-16T10:06:09.083 回答
1
C 中的数组只是指针,它们不包含有关其长度的信息。因此,C 程序员不仅应该保留一个指针,还应该保留它的长度。这是从“C-array”中删除特定值的片段
/// \return a new length
int removeFromArray( int * array, int arrayLength, int elementToRemove ) {
int i;
for ( i = 0; i < arrayLength; i++ ) {
if ( array[ i ] == elementToRemove ) {
memmove( & array[ i ], & array[ i + 1 ], arrayLength - i - 1 );
return arrayLength - 1;
}
}
return arrayLength;
}
于 2013-01-16T10:16:58.310 回答
0
在 C++ 中,您可以使用std::list
或std::vector
根据您的里程
如果你需要实现 in C
,你需要编写你的双链表实现,或者如果你std::vector
不想模拟,你可以使用memcpy
andarray indexing
于 2013-01-16T10:13:38.653 回答
0
据我了解,您不想或无法使用标准库(顺便说一句,为什么?)。
您可以查看其中一种 STL 实现中的向量模板的代码,并了解它是如何实现的。
基本算法很简单。如果要从数组中间删除某些内容,则必须在之后缩小它。如果您要插入中间 - 您必须先扩展它。例如,有时它涉及内存重新分配和移动数组memcpy
。
或者您可以如前所述实现双链表。但它不会像数组一样。
于 2013-01-16T10:16:32.957 回答