Teil eine Vektors einem anderen Vektor zuweisen.
-
ich würde gerne einen Teil eines Vektors einem anderem, neuen Vektor zuweisen. Wie mache ich das am besten? Habe es schon mit vector.insert versucht. Leider funktioniert es nicht so, wie von mir gedacht.
vector<double> test1(10); vector<double> test2(..)=.... test1.insert(test1.begin(),test2.begin(), test2.end());
Damit könnte ich den ganzen Vektor test2 nach test1 kopieren. Wenn ich nun aber nur die Einträge in test1, sagen wir von n-5 nach n+5 rüberkopieren will, wie mache ich das?
-
Am besten denke ich, ist das mit Iteratoren zu lösen...Das du einen Iterator auf das Element setzt von wo du einfügen willst und ein Iterator auf das Ende wo du aufhören willst, dann durchläufst du mit einem Iterator alle Elemente die dazwischen liegen und fpgst sie ein. Sollte gehe!?
-
was spricht gegen so was?
vector<double> test1; vector<double> test2; for (size_t i (0); i != 20; ++i) { double temp; std::cin >> temp; test1.push_back (temp + 100); test2.push_back (temp + 300); } size_t n; std::cin >> n; test1.insert (test1.begin(), test2.begin() + (n-5), test2.end() - (n+5)); //H_WL.insert (test1.begin(), ....) ich vermut ma, dass das nen Fehler beim Posten von dir war - das sollte so nicht gehen, weil in H_WL nirgendwo test1.begin () sein wird...
Man könnte natürlich auch erst mal test.begin () + n zwischenspeichern - und dann damit weiterrechnen, aber naja...
bb
-
std::vector<int> v (100,2); std::vector<int>::iterator it= v.begin () + 50; std::vector<int> v2 (it - 5, it + 5);
Was spricht den da deiner Meinung nach dagegen? Ist um einiges eleganter.
EDIT:
Bereichsprüfung musst du natürlich auch noch durchführen.
-
wie wärs mit std::copy
-
Airdamn schrieb:
wie wärs mit std::copy
Also wenn er aus der Sequenz einen neun vector erzeugen möchte, dann sollte er doch genau das tun, anstatt zuerst einene erzeugen und dann copy zu verwenden. (da müsste er ja noch überprüfen, dass er genug gross ist).
Kommt natürlich draufan, was er schlussendlich damit machen will. Wenn er wirklich einen Bereich einfügen will, wäre copy wirklich das Mittel der Wahl.
-
Danke erst einmal.
drakon schrieb:
std::vector<int> v (100,2); std::vector<int>::iterator it= v.begin () + 50; std::vector<int> v2 (it - 5, it + 5);
Was spricht den da deiner Meinung nach dagegen? Ist um einiges eleganter.
EDIT:
Bereichsprüfung musst du natürlich auch noch durchführen.ich werde es so mal versuchen. Habe noch nicht viel mit Iteratoren gemacht, daher noch ne kurze Frage dazu:
std::vector<int>::iterator it= v.begin () + 50;
kann ich die 50 auch dynamisch machen, soll heißen als unsigned variable oder ähnliches?...ich geh mal davon aus, dass es geht^^
std::vector<int>::iterator it= v.begin () + n;
Ich kann es grad nicht testen, was muss n für ein Datentyp sein?
-
Ja. Das geht.
Nimm int.