¿Cómo puedo eliminar un elemento de una matriz (unidimensional bidimensional)? - página 7

 
Ilya Malev:


Tarea: eliminar un elemento de un array.

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

Tarea: eliminar un elemento de un array.

Unidimensional o bidimensional. Las tareas tienen respuestas diferentes porque no harás el mismo código para ambas. O más bien puede hacerlo, pero no podrá llamarlo sin conocer de antemano el número de medidas del array. Ya que no eres programador, a juzgar por tus palabras, te sugiero que lo tomes como una fe

 
Dmitry Fedoseev:
Los arrays no pueden tener más de 4 dimensiones aquí. Así que puedes escribir 4 funciones diferentes y ya está.

¿No se puede construir uno de 8 dimensiones?

 
Ilya Malev:

Si vemos el problema de esta manera, entonces las matrices multidimensionales no deberían declararse en absoluto, sino que deberían utilizarse matrices de estructuras con diferentes campos. Pero la cuestión es diferente: ¿qué podemos hacer con una matriz de dimensionalidad arbitraria (desconocida de antemano) que ya existe como algo dado

Entonces estáis en un punto muerto :( . ¿Por qué no te gusta la variante con varias funciones?
 
Aliaksandr Hryshyn:
¿Qué es lo que no le gusta de la opción de múltiples funciones?

Al tener que duplicar el mismo código (el mismo del que hablas), en funciones con nombres diferentes para cada dimensionalidad diferente del array de parámetros

 
Dmitry Fedoseev:
Los arrays no tienen más de 4 dimensiones aquí. Así que puedes escribir 4 funciones diferentes y ya está.

El problema no está en escribir 4 funciones, sino en no poder utilizar una para cualquier array, como ocurre con cualquier otro tipo. Por eso es mejor evitar el uso de matrices multidimensionales (tipo incorporado []) en µl en absoluto

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

¿No se puede hacer uno de 8 dimensiones?

Las estructuras son fáciles de usar.

 
por cierto, typename, disponible en tiempo de compilación, no dirá no sólo sobre el número de medidas, sino incluso sobre el hecho de que el parámetro es un array. aunque se puede entender por sizeof==52. pero de nuevo, no dirá nada sobre el número de medidas. así que tampoco veo ninguna solución conveniente vía #define. A no ser que todo el código de la función, usando sólo llamadas incrustadas como ArrayCopy y ArrayResize, a las que se pueden pasar diferentes dimensiones de arrays, se pueda meter en define
 
Dmitry Fedoseev:

Eh, y la sobrecarga no lo salva:

¿Compilará así?

void z(int & z[],int shift){}; 
void z(int size_second_dimension,int & z[][],int shift){};
Aunque no lo recuerdo exactamente, pero parece que la segunda y la siguiente medida no pueden ser dinámicas. En consecuencia, puede haber errores al compilar dicho código. En este caso, la variable size_second_dimension puede usarse como tamaño establecido de la segunda dimensión y permite sobrecargar la función. Además, evita la necesidad de definir la dimensionalidad a través de ArrayRange()
 
Alexey Viktorov:

¿Compilará así?

Aunque no lo recuerdo con exactitud, parece que la segunda y la siguiente medida no pueden ser dinámicas. En consecuencia, puede haber errores en la compilación de dicho código. Aquí la variable size_second_dimension se puede utilizar como el tamaño predefinido de la segunda dimensión y permite sobrecargar la función. Además, evita la necesidad de definir la dimensionalidad a través de ArrayRange()

Compilará, pero no es interesante, ¿y qué pasa con z[][][]?

La segunda medida y las superiores no pueden ser dinámicas, pero la función no tiene que ser personalizada para un tamaño particular de la segunda dimensión, se puede averiguar a través de ArrayRange().

Si el número de medidas no permite sobrecargar la función, el tamaño de la segunda y otras medidas ciertamente no. Y no es nada interesante, porque no es nada universal. Sería más fácil escribir funciones con nombres diferentes.