0

例如,如果我们在 python 中有一个数组arr = [1,3,4]arr.remove(element)我们可以通过使用ot来删除数组中的元素,arr.pop()并且 list 会发生变异,它的长度会发生变化,并且该元素将不存在。有没有办法做到这一点是C ot C++?如果是,该怎么做?

4

4 回答 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::liststd::vector根据您的里程

如果你需要实现 in C,你需要编写你的双链表实现,或者如果你std::vector不想模拟,你可以使用memcpyandarray indexing

于 2013-01-16T10:13:38.653 回答
0

据我了解,您不想或无法使用标准库(顺便说一句,为什么?)。

您可以查看其中一种 STL 实现中的向量模板的代码,并了解它是如何实现的。

基本算法很简单。如果要从数组中间删除某些内容,则必须在之后缩小它。如果您要插入中间 - 您必须先扩展它。例如,有时它涉及内存重新分配和移动数组memcpy

或者您可以如前所述实现双链表。但它不会像数组一样。

于 2013-01-16T10:16:32.957 回答