Como remover um elemento de uma matriz (bidimensional unidimensional)? - página 7

 
Ilya Malev:


Tarefa: remover um elemento de uma matriz.

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

Tarefa: remover um elemento de uma matriz.

Unidimensional ou bidimensional. As tarefas têm respostas diferentes porque você não fará o mesmo código para ambos. Ou melhor, você pode fazê-lo, mas não será capaz de chamá-lo sem saber antecipadamente o número de medidas na matriz. Como você não é um programador, a julgar por suas palavras, eu sugiro que você aceite com fé

 
Dmitry Fedoseev:
As matrizes não podem ter mais do que 4 dimensões aqui. Assim, você pode escrever 4 funções diferentes e pronto.

Você não pode construir um de 8 dimensões?

 
Ilya Malev:

Se olharmos para o problema desta forma, então as matrizes multidimensionais não devem ser declaradas de forma alguma - ao invés disso, devem ser usadas matrizes de estruturas com campos diferentes. Mas a questão é diferente - o que podemos fazer com uma série de dimensionalidades arbitrárias (desconhecidas antecipadamente) que já existem como um dado

Você está num impasse então :( . Por que você não gosta da variante com várias funções?
 
Aliaksandr Hryshyn:
O que não deve ser gostado na opção de múltiplas funções?

Ao ter que duplicar o mesmo código (o mesmo de que você está falando), em funções com nomes diferentes para cada dimensionalidade diferente da matriz de parâmetros

 
Dmitry Fedoseev:
As matrizes não têm mais de 4 dimensões aqui. Assim, você pode escrever 4 funções diferentes e pronto.

O problema não está em escrever 4 funções, mas em não poder usar uma para qualquer matriz, como é o caso de qualquer outro tipo. É por isso que é melhor evitar o uso de matrizes multidimensionais (tipo embutido []) em µl

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

Você não pode fazer um de 8 dimensões?

As estruturas são fáceis de usar.

 
a propósito, o nome datilografia, disponível em tempo de compilação, não dirá apenas sobre o número de medições, mas até mesmo sobre o fato de que o parâmetro é uma matriz. embora possa ser entendido por sizeof==52. mas novamente, ele não dirá nada sobre o número de medições. portanto, também não vejo nenhuma solução conveniente via #define. A menos que todo o código de função, usando apenas chamadas embutidas como ArrayCopy e ArrayResize, para as quais diferentes dimensões de matriz podem ser passadas, poderia ser empurrado para definir
 
Dmitry Fedoseev:

Eh, e a sobrecarga não a salva:

Será que ela se compilará assim?

void z(int & z[],int shift){}; 
void z(int size_second_dimension,int & z[][],int shift){};
Embora eu não me lembre exatamente, mas parece que a segunda e as próximas medidas não podem ser dinâmicas. De forma correspondente, pode haver erros na compilação de tal código. Aqui, a variável tamanho_segundo_dimensão pode ser usada como um tamanho definido da segunda dimensão e permitir sobrecarregar a função. Além disso, evita a necessidade de definir a dimensionalidade através do ArrayRange()
 
Alexey Viktorov:

Será que ela se compilará assim?

Embora eu não me lembre exatamente, parece que a segunda e as próximas medidas não podem ser dinâmicas. Correspondentemente, pode haver erros na compilação de tal código. Aqui a variável tamanho_segundo_dimensão pode ser usada como o tamanho predefinido da segunda dimensão e permite sobrecarregar a função. Além disso, evita a necessidade de definir a dimensionalidade através do ArrayRange()

Ele irá compilar, mas não é interessante, e o que dizer de z[][][]?

A segunda e acima não pode ser dinâmica, mas a função não precisa ser personalizada para um determinado tamanho da segunda dimensão, ela pode ser descoberta através do ArrayRange().

Se o número de medidas não permitir sobrecarregar a função, o tamanho da segunda e outras medidas certamente não o farão. Além disso, não é nada interessante, já que não é nada universal. Seria mais fácil escrever funções com nomes diferentes.

Razão: