C++ Python列表和c/c++;阵列
例如,如果我们在python中有一个数组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::基于你的里程向
arr=[1,3,4]
。我们只需使用arr.remove(element)
otarr.pop()
就可以删除数组中的元素,列表将发生变化,其长度将发生变化,而该元素将不存在。有没有办法做到这一点是C OT C++?如果是的,怎么办?< /P> < P>我猜你正在寻找<代码> STD::向量< /> >(或标准库中的其他容器)。我猜你在寻找<代码> STD::向量< />代码(或标准库中的其他容器)。 < P> C++中,你可以使用如果您需要在<代码> C++ >代码中实现,您需要编写双链接列表实现,或者如果您不想模仿“代码> STD::vector < /COD>”,那么可以使用“<代码> MyCPy < /COD>”和
如果您需要在
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;
}