Ist es schlechte Praxis, um die Verwendung von multi-dimensionalen arrays in C/C++?
Einige Programmierer scheinen zu nicken hassen Sie, während andere scheinen zu denken, Sie sind in Ordnung. Ich weiß, dass alles, was getan werden kann, um eine multi-dimensionale array kann auch getan werden, um ein regelmäßiges array, so sind Sie funktional äquivalent. Ist es schlechte Praxis, um die Verwendung von multi-dimensionalen arrays, oder ist es egal?
- Berücksichtigen Sie, dass boost::multi_array als alternative. Es löst einige der Probleme, die von arrays mit weniger Aufwand und umständliche syntax der verschachtelten Vektoren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie zum speichern von multi-dimensionalen Daten, wo Sie wissen, die Dimensionen vor der Zeit? Wenn dem so ist, verwenden Sie ein multi-dimensionales array.
Wenn Sie nicht wissen, die Dimensionen vor der Zeit (D. H., Sie gehen zu müssen, um die dynamische Zuordnung des array), dann müssen Sie entweder entweder
Hängt es vom jeweiligen Anwendungsfall, aber als Faustregel gilt, fast immer habe ich lieber das erstere, weil es weniger Speicher-management-Aufwand und weniger heap-Zuweisungen. Die Komplexität ist für beide Ansätze, die wächst als die Zahl der Dimensionen erhöht, aber, meiner Meinung nach, es wächst viel schneller für das letztere Ansatz aufgrund des zusätzlichen Ebenen der Dereferenzierung.
Vorteile von multi-dim-arrays auf
Vector<Vector<>>
Nachteile:
Im Grunde aber kommt es auf die mangelnde überprüfung von Wertebereichen für mich.
vector<vector<T> > a(1, vector<T>(1)); a[0][0] = …
ist OK.vector<vector<>>
es sei denn, meine war gezackt.Gibt es folgende Vorteile von multi-dimensionalen arrays über
Vector<Vector<>>
:Wie würden Sie das umsetzen meiner Lieblings-Algorithmus ohne?
Gut, in C++, die ich nicht mag mehrdimensionalen arrays, da Sie ersetzt werden sollte mit
std::vector<std::vector<t> >
. Sie sind auch besonders wichtig, wenn Sie möchten, stellen einestd::vector<std::basic_string<t> >
.Mehrdimensionale arrays werden so einfache primitive ich bin überrascht, am meisten interessieren würde. Jedoch, ein design mit einer einzigen dimension ist wahrscheinlich besser als eine mit mehreren Dimensionen ausgeführt wird, werden alle anderen Dinge gleich sind.
Kann es möglich sein, speichern von multi-dimensionalen Daten in einem Daten-array ist, aber Sie haben zu verfolgen die Indizes selbst. Mehrdimensionale arrays sind eigentlich im Speicher gespeichert, wie einem eindimensionalen array, mit syntax zu unterstützen, dass Daten als multi-dimensional.
Wenn Sie mit mehrdimensionalen Daten, dann fühle ich, es ist am besten geeignet, um wählen Sie das richtige Werkzeug für den job (ein multi-dimensionales array).
Wenn mehrdimensionalen index Berechnung bugs,
std::valarray
mitstd::slice
ist die standard-Abstraktion.Kann ich nur empfehlen, zu Steigern.MultiArray. Boost.MultiArray bietet einen Allgemeinen N-dimensionalen array-Konzept-definition und gemeinsamen Implementierungen der Schnittstelle.
http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/index.html
Ich glaube nicht, dass das völlig richtig. Wir benötigen ein array von Zeigern zu speichern, etwas so grundlegendes wie eine Liste der Namen und dann Sortieren. Oder Zeiger auf Zeiger zum speichern einer variable-Länge-Zeichenfolge und dann eine Liste von solchen strings.
Als die original-Fragen erwähnt, nur arrays, die per se nicht sehen kann, wie Probleme wie diese kann getan werden, mit Leichtigkeit in einer regelmäßigen Anordnung. Bitte betrachten Sie nicht nur speichern Sie die Zeichenfolgen in einer 1-D-array (über irgendeine Art von Trennzeichen vielleicht) aber auch die Durchführung von Operationen wie Sortierungen.