Vektor schnell in anderen Vektor kopieren
-
Tja, geht das nur mit Hilfe einer Schleife, oder gibt die STL da eine hilfreiche Hand?
-
#include <algorithm> #include <vector> int main() { std::vector<T> a; // a füllen ... std::vector<T> b; //b.reserve(a.size()); std::copy(a.begin(),a.end(),b.begin()); }
so haben sich die STL Erfinder das gedacht.
-
Danke!
-
wenn du vorher ein resize machen musst, ist
b=a
sicher auch ok. kommt halt drauf an, was genau du mit "kopieren" meinst
-
oder vector<T> b(a);
-
a.swap(b);
-
nicht schlecht, b=a erspart ja das resize!
-
kingruedi schrieb:
#include <algorithm> #include <vector> int main() { std::vector<T> a; // a füllen ... std::vector<T> b; //b.reserve(a.size()); std::copy(a.begin(),a.end(),b.begin()); }
so haben sich die STL Erfinder das gedacht.
Ne. Sicher nicht. Ansonsten hätte vector nicht
a) einen Copy-Ctor
b) einen Range-Insert-Ctor
c) einen Assignment-Op
d) ein Assign-Membertemplate
e) ein Range-Insert-Membertemplate
...Also wenn du den zweiten Vektor noch nicht erzeugt hast und du den gesamten Vektor kopieren willst:
vector<T> original; // ... vector<T> copy(original);
Wenn du alle Elemente der Sequenz [a, b) kopieren willst:
iterator first = ...; iterator last = ...; vector<T> copy(first, last);
Wenn der Copy-Vektor bereits existiert, solltest du assign verwenden.
Und noch ein Merksatz aus Effective STL:
almost all uses of copy where the destination range is specified using an insert iterator(i.e. via inserter, back_inserter, or front_inserter) can be - should be - replaced with calls to range member functions
-
Ich hab das:
mathplane::mathplane(vector<vector<float> >const &temp) : m_arr(temp.size()) { m_zeilen = temp.size(); m_spalten = temp[m_zeilen-1].size(); ... //und will jetzt nur alles vom Vektor temp in den Vektor arr kopieren
Das mit der Zuweisung "b=a" funktionierte (obwohl es nicht dürfte?).
-
mann, das wurde doch jetzt ausführlich erklärt
mathplane::mathplane(vector<vector<float> >const &temp) : m_arr(temp) { }