ein Vektor aus Vektoren...
-
hallo, ich benötige eine Matrix, die allerdings speiell ist, da ihre spalten unterschiedlich lang sind (0 bis 20000 Einträge).
meine idee war bisher
[cpp] std::vector< std::vectory< int > > OverlordVector; std::vector<int> minivector; for (i = 0; i < 20000; i++) { minivector.push_back(i) } OverlordVector.push_back(minivector); [/cpp]das funktioniert auch.
Jetzt zur Frage:ich möchte die Spalten miteinander vergleichen. Nach meiner version hieße das aber
[cpp] vector<int> vec1; vector<int> vec2; vec1 = OverlordVector.at(3); vec2 = OverlordVector.at(4); //Vergleich durchführen in fuktion, die vec1 und vec2 als parameter hat. [/cpp]das Erstellen der Kopien dauert leider. kann ich irgendwie geschickt zeiger oä an die (vergleichs)funktion übergeben und mir das kopieren sparen? Oder kann ich vllt Element (x,y) der "Matrix" adressieren?
ANGs_Pino
-
Am besten du nimmst Referenzen. Wenn du nur vergleichen willst können die auch konstant sein.
const vector<int>& vec1(OverlordVector.at(3)); const vector<int>& vec2(OverlordVector.at(4));
-
ANGs_Pino schrieb:
Oder kann ich vllt Element (x,y) der "Matrix" adressieren?
Wie meinst du das jetzt? Nur das Element an der Stelle (x|y)? Falls ja, kannst du doch einfach zwei Mal
at()oderoperator[]einsetzen.Braunstein schrieb:
Am besten du nimmst Referenzen. Wenn du nur vergleichen willst können die auch konstant sein.
Ist zwar Haarspalterei, aber Referenzen sind immer konstant. Das
constbezieht sich auf den referenzierten Wert. Nur, damit keine Missverständnisse entstehen...
-
Nexus schrieb:
ANGs_Pino schrieb:
Oder kann ich vllt Element (x,y) der "Matrix" adressieren?
Wie meinst du das jetzt? Nur das Element an der Stelle (x|y)? Falls ja, kannst du doch einfach zwei Mal
at()oderoperator[]einsetzen.hättest du ein beispiel mit dem COdeausschnitt von mir? Also wäre es richtig, wenn ich:
[cpp] int a = OverlordVector.at(3).at(5); a = OverlordVector[3][5]; [/cpp]für Element (3,5) schreiben würde?
ANGsPino
-
ANGs_Pino schrieb:
[cpp] int a = OverlordVector.at(3).at(5); a = OverlordVector[3][5]; [/cpp]für Element (3,5) schreiben würde?
ANGsPino
Jup. Das sollte bei einem vector von vectoren so funktionieren.
Warum hast du das nicht selbst ausprobiert?
-
Du kannst auch eine Referenz auf das Objekt speichern, wenn du es einzeln manipulieren willst.
int& Value = OverlordVector[3][5]; Value *= 3; // verändert OverlordVector.Der Unterschied von
at()undoperator[]besteht darin, dassat()eine Bereichsprüfung durchführt und gegebenenfalls eine Exception vom Typstd::out_of_rangewirft.