如何从一个数组(一维二维)中删除一个元素? - 页 7

 
Ilya Malev:


任务:从一个数组中删除一个元素。

 
Алексей Тарабанов:

任务:从一个数组中删除一个元素。

一维或二维的。这些任务有不同的答案,因为你不会为两者制作相同的代码。或者说,你可以这样做,但如果不事先知道数组中的测量数量,你就无法调用它。既然你不是一个程序员,从你的话来看,我建议你把它当作信仰

 
Dmitry Fedoseev:
这里的数组不能有超过4个维度。所以,你可以写4个不同的函数,仅此而已。

你就不能造一个八维的吗?

 
Ilya Malev:

如果我们这样看问题,那么就根本不应该声明多维 数组--应该使用具有不同字段的结构数组来代替。但问题是不同的--我们可以对一个已经存在的任意(事先未知)维度的数组做什么?

那么你们就陷入了僵局 :( 。你为什么不喜欢有几种功能的变体呢?
 
Aliaksandr Hryshyn:
多重功能选项有什么不满意的呢?

通过不得不重复相同的代码(也就是你说的那个),在函数中为每个不同维度 的参数数组不同的 名字

 
Dmitry Fedoseev:
数组在这里没有超过4个维度。因此,你可以写4个不同的函数,仅此而已。

问题不在于写4个函数,而在于不能对任何数组使用一个函数,就像对其他类型一样。这就是为什么最好在µl中完全避免使用多维数组(内置类型[])的原因

 
Алексей Тарабанов:

你就不能做一个8维的吗?

这些结构很容易使用。

 
顺便说一下,在编译时可用的typename不仅不会告诉你测量的数量,甚至不会告诉你参数是一个数组的事实。除非所有的函数代码,只使用像ArrayCopy和ArrayResize这样可以传递不同数组尺寸的 嵌入式调用,可以塞进定义的
 
Dmitry Fedoseev:

诶,而且重载也救不了它。

它能像这样编译吗?

void z(int & z[],int shift){}; 
void z(int size_second_dimension,int & z[][],int shift){};
虽然我记不清楚 了,但似乎第二次和下一次的测量不能是动态的。相应地,在编译此类代码时可能会出现错误。在这里,size_second_dimension变量可以作为第二维度的设定尺寸,并允许重载该函数。另外,它避免了通过ArrayRange()定义维度的需要。
 
Alexey Viktorov:

它能像这样编译吗?

虽然我记不清楚 了,但似乎第二次和下一次的测量不能是动态的。相应地,这种代码的编译也可能出现错误。这里的size_second_dimension变量可以作为第二维的预定义尺寸,并允许重载该函数。另外,它避免了通过ArrayRange()定义维度的需要。

它将被编译,但它并不有趣,那么z[][][]呢?

第二维及以上的测量值不能是动态的,但该函数不必为第二维的特定尺寸而定制,它可以通过ArrayRange()查出。

如果测量值的数量不允许超载,那么第二个和其他测量值的大小当然也不允许超载。此外,这一点都不有趣,因为它根本不具有普遍性。用不同的名字来写函数会更容易。