C++ Python列表和c/c++;阵列

C++ Python列表和c/c++;阵列,c++,python,c,list,C++,Python,C,List,例如,如果我们在python中有一个数组arr=[1,3,4]。我们只需使用arr.remove(element)otarr.pop()就可以删除数组中的元素,列表将发生变化,其长度将发生变化,而该元素将不存在。有没有办法做到这一点是C OT C++?如果是的,怎么办?< /P> < P>我猜你正在寻找 STD::向量< /> >(或标准库中的其他容器)。我猜你在寻找 STD::向量< />代码(或标准库中的其他容器)。 < P> C++中,你可以使用 STD::列表或 STD::基于你的里程向

例如,如果我们在python中有一个数组
arr=[1,3,4]
。我们只需使用
arr.remove(element)
ot
arr.pop()
就可以删除数组中的元素,列表将发生变化,其长度将发生变化,而该元素将不存在。有没有办法做到这一点是C OT C++?如果是的,怎么办?< /P> < P>我猜你正在寻找<代码> STD::向量< /> >(或标准库中的其他容器)。我猜你在寻找<代码> STD::向量< />代码(或标准库中的其他容器)。

< P> C++中,你可以使用 STD::列表或<代码> STD::基于你的里程

向量<代码> > >

如果您需要在<代码> C++ >代码中实现,您需要编写双链接列表实现,或者如果您不想模仿“代码> STD::vector < /COD>”,那么可以使用“<代码> MyCPy < /COD>”和数组索引> <代码> < /P> < P> C++中,您可以使用“代码> STD::列表或<代码> STD::基于您的里程

向量<代码> > >
如果您需要在
C
中实现,您需要编写双链接列表实现,或者如果您不想模拟
std::vector
,您可以通过使用
memcpy
数组索引

来实现,正如我所理解的,您不想或无法使用标准库(顺便说一句,为什么?)

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

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


或者您可以实现前面提到的双链接列表。但它的行为与数组不同。

据我所知,您不希望或无法使用标准库(顺便说一句,为什么?)

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

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


或者您可以实现前面提到的双链接列表。但它的行为与数组不同。

C中的数组只是指针,不包含有关其长度的信息。所以,C程序员不仅要保留指针,还要保留它的长度。下面是一个从“C数组”中删除特定值的代码段

//\n返回新的长度
int-removeFromArray(int*array,int-arrayLength,int-elementToRemove){
int i;
对于(i=0;i
C中的数组只是指针,不包含有关其长度的信息。所以,C程序员不仅要保留指针,还要保留它的长度。下面是一个从“C数组”中删除特定值的代码段

//\n返回新的长度
int-removeFromArray(int*array,int-arrayLength,int-elementToRemove){
int i;
对于(i=0;i
你指的是
[]
数组还是STL
数组
?我指的是python中的标准列表,比如a=['spam','eggs',1001234]。我不知道什么是STL数组。。。。C/C++没有“标准列表”,当然也没有Python的。我只需要知道如何做我要求的)你能帮我吗?除非你能回答一个非常简单的问题。你是指
[]
数组还是STL
数组
?我是指Python中的标准列表,比如a=['spam',egs',1001234]。我不知道什么是STL数组。。。。C/C++没有“标准列表”,当然也没有Python的。我只需要知道如何做我要求的事情)你能帮我吗?除非你能回答一个非常简单的问题。但是我如何在没有standart库的情况下实现这种方法?在C?@ IgorZimenko You问“C或C++”(并且标记为“代码> C++ +代码>”),是否有办法做到这一点,所以我回答了C++。在C语言中,您必须自己实现它。如果你想这样做,只要尝试一下,如果你遇到了具体的问题,在这里提出新的问题(标记为
C
)。如果你不知道从哪里开始,读一本关于数据结构的书可能是合适的。@Angew:std::deque最合适approximation@IgorZimenko没有标准库如何实现?您几乎必须重新实现
std::vector
的大部分功能。(如果忽略分配器业务,这并不像听起来那么困难。)@Abhijit我不认为
std::deque
std::vector
更合适。Python列表提供随机访问(
[]
)和任意位置的删除/插入。更不用说像
l[3::3]=3*[0]
,将每三个元素设置为0。但是如果没有standart库,我如何实现这样的方法呢?在C?@ IgorZimenko You问“C或C++”(并且标记为“代码> C++ +代码>”),是否有办法做到这一点,所以我回答了C++。在C语言中,您必须自己实现它。如果你想这样做,只要尝试一下,如果你遇到了具体的问题,在这里提出新的问题(标记为
C
)。如果你不知道从哪里开始,读一本关于数据结构的书可能是合适的。@Angew:std::deque最合适approximation@IgorZimenko没有标准库如何实现?你几乎必须重新实施
/// \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;
}