Wie entferne ich ein Element aus einem Array (eindimensional und zweidimensional)? - Seite 7

 
Ilya Malev:


Aufgabe: Entfernen eines Elements aus einem Array.

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

Aufgabe: Entfernen eines Elements aus einem Array.

Eindimensional oder zweidimensional. Die Aufgaben haben unterschiedliche Antworten, weil Sie nicht für beide den gleichen Code erstellen werden. Oder besser gesagt, Sie können es tun, aber Sie werden es nicht aufrufen können, ohne vorher die Anzahl der Messungen im Array zu kennen. Da Sie kein Programmierer sind, schlage ich nach Ihren Worten zu urteilen vor, dass Sie sich auf den Glauben verlassen

 
Dmitry Fedoseev:
Arrays können hier nicht mehr als 4 Dimensionen haben. Sie können also 4 verschiedene Funktionen schreiben und das war's.

Können Sie nicht eine 8-dimensionale bauen?

 
Ilya Malev:

Wenn wir das Problem auf diese Weise betrachten, dann sollten mehrdimensionale Arrays überhaupt nicht deklariert werden - stattdessen sollten Arrays von Strukturen mit verschiedenen Feldern verwendet werden. Die Frage ist jedoch eine andere: Was können wir mit einem Feld beliebiger (im Voraus unbekannter) Dimensionalität tun, das bereits als gegebene Größe existiert?

Sie sind also in einer Sackgasse :( . Warum gefällt Ihnen die Variante mit mehreren Funktionen nicht?
 
Aliaksandr Hryshyn:
Was kann man an der Option der Mehrfachfunktion nicht mögen?

Indem derselbe Code (derselbe, von dem Sie sprechen) in Funktionen mit unterschiedlichen Namen für jede unterschiedliche Dimensionalität des Parameterarrays dupliziert werden muss

 
Dmitry Fedoseev:
Arrays haben hier nicht mehr als 4 Dimensionen. Sie können also 4 verschiedene Funktionen schreiben und das war's.

Das Problem besteht nicht darin, 4 Funktionen zu schreiben, sondern darin, dass man keine für ein beliebiges Array verwenden kann, wie es bei allen anderen Typen der Fall ist. Deshalb ist es besser, mehrdimensionale Arrays (eingebauter Typ []) in µl überhaupt nicht zu verwenden

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

Können Sie nicht eine 8-dimensionale machen?

Die Strukturen sind einfach zu nutzen.

 
Übrigens, typename, verfügbar zur Kompilierzeit, wird nicht nur über die Anzahl der Messungen, sondern sogar über die Tatsache, dass der Parameter ein Array ist. obwohl es durch sizeof==52 verstanden werden kann. aber wieder, es wird nichts über die Anzahl der Messungen sagen. so sehe ich keine bequeme Lösung über #define entweder. Es sei denn, der gesamte Funktionscode, der nur eingebettete Aufrufe wie ArrayCopy und ArrayResize verwendet, an die verschiedene Array-Dimensionen übergeben werden können, könnte in define
 
Dmitry Fedoseev:

Eh, und Überlastung rettet es auch nicht:

Wird es so kompiliert?

void z(int & z[],int shift){}; 
void z(int size_second_dimension,int & z[][],int shift){};
Ich erinnere mich zwar nicht mehr genau, aber es scheint, dass die zweite und die nächste Messung nicht dynamisch sein können. Dementsprechend können beim Kompilieren eines solchen Codes Fehler auftreten. Hier kann die Variable size_second_dimension als festgelegte Größe der zweiten Dimension verwendet werden und erlaubt es , die Funktion zu überladen. Außerdem entfällt dadurch die Notwendigkeit, die Dimensionalität durch ArrayRange() zu definieren.
 
Alexey Viktorov:

Wird es so kompiliert?

Ich kann mich zwar nicht mehr genau erinnern, aber es scheint, dass die zweite und die nächste Messung nicht dynamisch sein können. Dementsprechend kann es bei der Kompilierung eines solchen Codes zu Fehlern kommen. Hier kann die Variable size_second_dimension als vordefinierte Größe der zweiten Dimension verwendet werden und erlaubt es , die Funktion zu überladen. Außerdem entfällt dadurch die Notwendigkeit, die Dimensionalität durch ArrayRange() zu definieren.

Es wird kompiliert, aber es ist nicht interessant, und was ist mit z[][][]?

Die zweite und darüber hinausgehende Messungen können nicht dynamisch sein, aber die Funktion muss nicht für eine bestimmte Größe der zweiten Dimension angepasst werden, sondern kann durch ArrayRange() ermittelt werden.

Wenn die Anzahl der Messungen es nicht erlaubt, die Funktion zu überlasten, dann gilt dies auch für die Größe der zweiten und anderer Messungen. Außerdem ist es uninteressant, da es überhaupt nicht universell ist. Es wäre einfacher, Funktionen mit unterschiedlichen Namen zu schreiben.