list in vector umwandeln und umgekehrt
-
Hallo,
ich habe folgendes Problem:
ich will die C++ STL verwenden und bei einem vector die methoden einer liste verwenden. Kann ich eine Liste irgendwie in einen vector umwandeln und umgekehrt?
Und wie mache ich das mit den includes? <list> und <vector> schließen sich ja aus.#include <list> #include <vector> using namespace std; vector<int> v; //hat die Methoden eines vectors und nicht einer liste
-
Hallo,
Kann ich eine Liste irgendwie in einen vector umwandeln und umgekehrt?
Jup, denn sowohl std::list als auch std::vector besitzen einen Ctor, über den du die Liste/den Vektor mit den Elementen initialisierst, die sich zwischen den angegebenen Iteratoren befinden. (Siehe eventuell auch die besagten Ctoren von std::list und std::vector!)
Bsp: std::list to std::vector
#include <list> #include <vector> #include <iostream> #include <algorithm> #include <iterator> using namespac std; int main() { list<int> l; l.push_back(9); l.push_back(18); l.push_back(27); // .. vector<int> v(l.begin(), l.end()); // alle Elemente von List in den Vektor... //testausgabe: copy(v.begin(), v.end(), ostream_iterator<int>(cout, "|")); cout << endl; }Von vector nach list gehts analog zu dem Beispiel.
Gruß Caipi
-
Hallo,
es geht aber auch mit std::copy, wenn man nicht alles kopieren will:
#include <algorithm> //... std::copy(v.begin(),v.end(),l.begin());Statt begin() oder end() setzt man dann eben was anderes ein.
-
@Lars Hupel:
Das was du da machst ist brandgefährlich!
Wer sagt dir das die Liste l ausreichend Speicher bereitstellt?
copy inkrementiert den Iterator brutal weiter,ob der jetzt noch auf gültigen Speicher "zeigt" oder auch nicht.
Für diesen Fall gibt es insert Iteratoren.MfG Spacelord
-
Ah sorry. Mir fällts jetzt auch auf. Ich bin einfach davon ausgegangen, dass dort genügend Speicherplatz vorhanden ist. Aber danke für den Hinweis.
-
sicher, dass ne std::deque nicht besser für deine zwecke wäre?