Vectorgröße setzen UND den inhalt beibehalten
-
Hallo!
Ich hab mal bei http://www.cppreference.com/cppvector.html geschaut, kann es sein das es folgende, gesuchte Methode nicht gibt:
Die Methode soll den Vector auf eine bestimmte Größe setzen, genau wie resize(), nur der bisherige Inhalt soll eben nicht wie bei Resize auf 0 gesetzt werden.
Ungefähr so:
if(vector.size()-1 < Wert) vector.befehl(wert);
Geht das oder müsste ich umständlich die Differenz zwischen
Größe und Wert berechnen und dann per forschleife immer push_back() anwenden?
-
Bei resize werden die alten Elemente nicht auf 0 gesetzt, sie müssen nur einen funktionierenden Copyconstructor haben!
-
Hmm ich seh da gerade noch ein anderes Problem, hiermit wollte ich dir das ganze mal zeigen:
#include <vector> #include <iostream> using namespace std; vector<vector<int > >velements; int main() { velements.resize(3); velements[0].resize(1); velements[2][1] = 17; velements.resize(14); // ohne resize wird 17 ausgegeben cout<<velements[2][1]<<endl; return(0); }
Bis mir aufgefallen ist das velements.resize(14) ja nur der erste vector vergrößert wird... wie kann ich einen 2 dimensionalen vector vergrößern?
-
std::vector<std::vector <int> > myArray( sizeX, std::vector<int>(sizeY, defaultWert));
Erstellt Dir ein 2d-Array mit X*Y Elementen, die mit defaultWert intialisiert sind. Aber wirklich schön ist das auch nicht. Bei boost gibt's glaub eine Klasse für mehrdimensionale Arrays.
MfG Jester
-
Du schreibst deine 17 auch in einen Speicher, der dir nicht gehört. Das Element
(2,1) gibts nämlich gar nicht. Das er da tatsächlich mal ne 17 ausgibt, ist Glück.
Was du da produzierst, ist undefiniertes Verhalten. Genausogut könnte das Programm
deine Lieblings-mp3 löschen.
-
Kommt boost in den Standard?
-
Ingo schrieb:
Kommt boost in den Standard?
Ja, zumindest teilweise werden Sachen von boost in den neuen Standard übernommen. Wann der erscheint steht aber noch in den Sternen. Vermutlich in diesem Jahrzehnt.
-
Taurin schrieb:
Du schreibst deine 17 auch in einen Speicher, der dir nicht gehört. Das Element
(2,1) gibts nämlich gar nicht. Das er da tatsächlich mal ne 17 ausgibt, ist Glück.
Was du da produzierst, ist undefiniertes Verhalten. Genausogut könnte das Programm
deine Lieblings-mp3 löschen.Wieso ist das undefiniert?
Ich habe einen Vector der etwas vom typ vector enthält.
Der hat noch keine größe. Jetzt sag ich
velements.resize(3);
Jetzt hab ich doch einen vector der 3 (nämlich 0-2) vectoren aufnehmen kann.
Die vectoren haben aber noch gar keine größe, deshab setze ich sie auf 1:velements[0].resize(1); // für das erste feld
Nun hab ich einen Vector:
velements[0][0],
velements[1][undefiniert]
velements[2][undefiniert]Und bisher hat das Programm mit allen Zahlen funktioniert, wieso ist das denn undefiniert
-
k**** bin ich dumm, natürlich hast du Recht
-
Weil Du auf velements[2][1] zugreifst und velements[2] ein leerer Vektor ist.
Daß es funktioniert heißt garnichts. Und daß nach dem resize die Daten nicht mehr da sind spricht Bände. Der Vektor kopiert nämlich die Daten, die er hat. Nur wenn er keine hat, dann kopiert er auch keine.