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?


Anmelden zum Antworten