Come si rimuove un elemento da un array (unidimensionale bidimensionale)? - pagina 7

 
Ilya Malev:


Compito: rimuovere un elemento da un array.

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

Compito: rimuovere un elemento da un array.

Unidimensionale o bidimensionale. I compiti hanno risposte diverse perché non farai lo stesso codice per entrambi. O meglio, potete farlo, ma non potrete chiamarlo senza conoscere in anticipo il numero di misure dell'array. Dal momento che non sei un programmatore, a giudicare dalle tue parole, ti suggerisco di prenderlo per fede

 
Dmitry Fedoseev:
Qui gli array non possono avere più di 4 dimensioni. Quindi, potete scrivere 4 funzioni diverse e questo è tutto.

Non puoi costruirne uno a 8 dimensioni?

 
Ilya Malev:

Se guardiamo il problema in questo modo, allora gli array multidimensionali non dovrebbero essere dichiarati affatto - dovrebbero invece essere usati array di strutture con campi diversi. Ma la domanda è diversa - cosa possiamo fare con un array di dimensionalità arbitraria (sconosciuta in anticipo) che esiste già come dato

Siete in stallo allora :( . Perché non ti piace la variante con diverse funzioni?
 
Aliaksandr Hryshyn:
Cosa c'è che non va nell'opzione delle funzioni multiple?

Dovendo duplicare lo stesso codice (lo stesso di cui state parlando), in funzioni con nomi diversi per ogni diversa dimensionalità dell'array di parametri

 
Dmitry Fedoseev:
Gli array non hanno più di 4 dimensioni qui. Quindi, potete scrivere 4 funzioni diverse e questo è tutto.

Il problema non è nello scrivere 4 funzioni, ma nel non poterne usare una per qualsiasi array, come per qualsiasi altro tipo. Pertanto, è meglio evitare di usare gli array multidimensionali (tipo integrato []) in µl

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

Non puoi farne uno a 8 dimensioni?

Le strutture sono facili da usare.

 
a proposito, typename, disponibile in fase di compilazione, non dirà non solo il numero di misure, ma anche il fatto che il parametro è un array. anche se può essere capito da sizeof==52. ma di nuovo, non dirà nulla sul numero di misure. quindi non vedo alcuna soluzione conveniente tramite #define. A meno che tutto il codice della funzione, usando solo chiamate incorporate come ArrayCopy e ArrayResize, a cui possono essere passate diverse dimensioni di array, possa essere infilato in define
 
Dmitry Fedoseev:

Eh, e il sovraccarico non lo salva:

Si compila così?

void z(int & z[],int shift){}; 
void z(int size_second_dimension,int & z[][],int shift){};
Anche se non ricordo esattamente, ma sembra che la seconda e la prossima misura non possano essere dinamiche. Corrispondentemente, ci possono essere errori quando si compila tale codice. Qui, la variabile size_second_dimension può essere usata come dimensione impostata della seconda dimensione e permette di sovraccaricare la funzione. Inoltre, evita la necessità di definire la dimensionalità attraverso ArrayRange()
 
Alexey Viktorov:

Si compila così?

Anche se non ricordo esattamente, sembra che la seconda misura e la successiva non possano essere dinamiche. Di conseguenza, ci possono essere errori nella compilazione di tale codice. Qui la variabile size_second_dimension può essere usata come dimensione predefinita della seconda dimensione e permette di sovraccaricare la funzione. Inoltre, evita la necessità di definire la dimensionalità attraverso ArrayRange()

Compilerà, ma non è interessante, e che dire di z[][][][]?

La seconda e le misure superiori non possono essere dinamiche, ma la funzione non deve essere personalizzata per una dimensione particolare della seconda dimensione, può essere scoperta attraverso ArrayRange().

Se il numero di misure non permette di sovraccaricare la funzione, la dimensione della seconda e delle altre misure certamente no. E non è affatto interessante, perché non è affatto universale. Sarebbe più facile scrivere funzioni con nomi diversi.

Motivazione: