Vector in Vector schreiben
-
Tut mir leid, ich habe deine Post nicht ganz verstanden.
Ich will nur alle elemente von Backup in final speichern, doch dass das kopieren der Backup-Elemente erst beim 1. element von final anfängt.
-
win32 schrieb:
Tut mir leid, ich habe deine Post nicht ganz verstanden.
Ich will nur alle elemente von Backup in final speichern, doch dass das kopieren der Backup-Elemente erst beim 1. element von final anfängt.
Du schreibst
Backup[i] = final[i+1];und willst Backup in final kopieren?
Mit meinem Post wollte ich sagen, dass final.size() + 1 == Backup.size() gelten sollte.
-
Achso als das ich final erst die gleiche größe zuweiße wie die von Backup damit ich nicht in nicht existierende elemente schreibe ?
-
win32 schrieb:
Achso als das ich final erst die gleiche größe zuweiße wie die von Backup damit ich nicht in nicht existierende elemente schreibe ?
Nein, eins größer, weil du ja das erste Element nicht überschreiben willst.
-
Du schreibst, dass du final nicht überschreiben willst, schreibst aber in backup und nicht in final?
jedenfalls gibts 2 möglichkeiten:
std::vector<std::string> a, b; /* a füllen */ b[0] = "asd"; b.resize(a.size()+1); for(auto i = a.begin(), e = a.end(); i != e; ++i) b = *a;oder
std::vector<std::string> a, b; /* a füllen */ b[0] = "asd"; b.reserve(a.size()+1); for(auto i = a.begin(), e = a.end(); i != e; ++i) b.push_back(*a);natürlich kannst du die schleifen auch (mit std::copy) verstecken, falls dir das lieber ist.
bb
-
win32 schrieb:
ich versuch eine vector in den anderen zu schreiben.
Bis jetzt hab ich dasstd::vector<std::string> Backup,final; for(int i = 0; i<Backup.size(); i++) { Backup[i] = final[i+1]; }Das 0 Element von final ist schon beschrieben und ich möchte es nicht überschreiben, deswegen soll ein element von Backup immer ein element höher in final geschrieben werden.
Das mit der Zuweisung funktioniert so, dass der Wert der rechten Seite dem Objekt der linken zugewiesen wird. Du kopierst hier also Werte aus final nach Backup und nicht umgekehrt.
win32 schrieb:
Wenn ich das jetzt compeliere bekomme ich einen Fehler
vector subscript out of range
Du kannst nur auf Vektorelemente zugreifen, die es auch gibt. "out of range" heißt hier, dass du einen Index
kverwendest, für den nicht0 <= k < dervector.size()gilt. In Deinem Fall wahrscheinlich k=i+1 und dervector=final.Eine Schleife musst du hier übrigens nicht selbst schreiben. Für ein solches Kopieren gibt es schon
std::copyaus dem<algorithm>-Header.
-
win32 schrieb:
Hat jemand einen anreiz?
http://www.cplusplus.com/reference/stl/vector/insert/ - die dritte Variante.
-
Ah nun ist mir einiges mehr klar.Danke an euch alle und besonders krümelkacker; hat mir sehr geholfen was du gepostet hast.
-
@unskilled: Was sollen denn die Anweisungen in den Schleifen?
-
wxSkip schrieb:
@unskilled: Was sollen denn die Anweisungen in den Schleifen?
oha - ich nehm mal an, du meintest das hier:
std::vector<std::string> a, b; /*...*/ for(auto i = a.begin(), e = a.end(); i != e; ++i) b = *a;ist natürlich ein wenig fail von mir gewesen. nachdenken 4tw

for(auto i = 0, e = a.size(); i != e; ++i) b[i+1] = a[i];falls du was anderes meintest... weiß ich nicht, was du meinst^^
bb