erstellen einer kopie eines vektors der form vector<vector<int>>x
-
hallo,
ich habe folgendes problemvector<vector<int>>aMatrix; vector<vector<int>>anotherMatrix; aMatrix.swap(anotherMatrix)mit swap möchte ich in anotherMatrix , die eine leere matrix ist eine exakte kopie von aMatrix erstellen. Leider erhalte ich beim kompilieren dieser stelle die meldung main funktioniert nicht mehr. welche möglchkeiten gibt es einen verketteten vektor in einen anderen zu kopieren
fürvector<int>aMatrix; vector<int>anotherMatrix; aMatrix.swap(anotherMatrix)geht es ohne probleme
danke euch im voraus
-
Reinhold.Weihs schrieb:
...mit swap möchte ich in anotherMatrix , die eine leere matrix ist eine exakte kopie von aMatrix erstellen...
"swap" erzeugt keine Kopie, das würde dem Namen auch sehr widersprechen. Man sollte keine Methoden verwenden, die man nicht verstanden hat. swap heißt tauschen. Du tauschst den vorhandenen Inhalt von aMatrix mit anotherMatrix aus. aMatrix ist anschließend demzufolge leer und anotherMatrix hat den Inhalt bekommen.
Warum nicht:
vector<vector<int>> aMatrix; // ... vector<vector<int>> anotherMatrix = aMatrix;
-
Danke jetzt funktioniert es !! vielen dank
-
Ein vector<vector> ist übrigens kein gutes Modell für die typischen Eigenschaften einer Matrix. vector<vector> ist viel zu allgemein.
-
vektoren haben flexible grösse , in meinem falle mache ich den clark and wright savings algorithmus damit und mit arrays fixer grösse hatte ich grosse schwierigkeiten da diese etwa beim einlesen vin koordinaten aus textdateien sich nicht autoamatisch der anzahl der eingelesenen kunden anpassen in meinem falle weiss ic nicht im vorhinein wieviele kunden aus der txt datei eingelesen werden, ein fixes array wäre in diesem falle dan einmal zu gross und einmal zu klein. in dem 1 jahr in dem ich jetzt mit c++ arbeite haben sich vektoren und der list container bestens bewährt, arrays fixer grösse haben sehr viele probleme..........
aber danke nochmals für die schnelle hilfe die ich immer in diesem forum finde und ein glückliches neues jahr !!!!
-
Kunden? Matrix? Entweder machst du wirklich abgefahrene Mathematik oder du nutzt den Begriff "Matrix" anders, als ich erwartet hatte.
-
am besten clark and wright savings algoritmus googeln das ist teil 1 des programmes
dann variable neigborhood search oder vns mit diesem algorithmus verbessere ich die ergebnisse und
simulated annealing ist auch dabei.lg
reinhold
-
siehe die klasse array_2d_t in
in https://www.c-plusplus.net/forum/327218-full
ist auch dynamisch aber viel schneller als dein std::vector<std::vector<int>>
falls du nicht viele unterschiedliche Datentypen hast
-
-
Gast3 schrieb:
siehe die klasse array_2d_t in
...
ist auch dynamisch aber viel schneller als dein std::vector<std::vector<int>>In wiefern soll das wirklich schneller sein? (wobei ich auch eher eindimensional das ganze abbilden würde, dafür kann man aber auch den vector nutzen, und einmal reserve machen).
-
asc schrieb:
Gast3 schrieb:
siehe die klasse array_2d_t in
...
ist auch dynamisch aber viel schneller als dein std::vector<std::vector<int>>In wiefern soll das wirklich schneller sein? (wobei ich auch eher eindimensional das ganze abbilden würde, dafür kann man aber auch den vector nutzen, und einmal reserve machen).
Eine Speicherallokation anstatt width Allokationen. Daten sind physisch näher zusammen, was becheres Caching bringt. Dadurch auch eine Indirektion weniger. etc.
-
Eine Speicherallokation anstatt width Allokationen. Daten sind physisch näher zusammen, was becheres Caching bringt. Dadurch auch eine Indirektion weniger. etc.
genau darum - klar gehts auch mit einen std::vector<int> als new ersatz - bisschen sauberer, und const correctness (fuer getter) wirkt hier teilweise auch wunder