STL vector element verschieben



  • Hallo,

    angenommen ich habe einen int-vector mit 10 Elementen...
    Wie kann ich z.B. das zweite Element an die siebte Stelle verschieben?



  • Warum willst du das machen?Vielleicht können dir einen besseren Lösungsansatz bieten wenn du uns erklärst was du machen willst.



  • std::swap()
    

    Halt nein, hab nicht nachgedacht.

    Aber ich lass es mal stehen.



  • Verschieben ist in einem std::vector nicht sehr performant. Mit std::copy() kannst du einzelne Elemente verschieben, dann müsstest du das letzte überschreiben. Oder alternativ erase() und insert() anwenden.



  • Also ich habe einen vector von 10 int-Elementen
    Diesen hab ich per iterator in zwei hälften aufgeteilt (Iterator für das erste Element der zweiten Liste)

    vector<int> vi;
    for (unsigned int i = 0 ; i < 10 ; i++)
        vi.push_back(i);
    vector<int>::iterator iter = vi.begin() + 5;
    

    ich möchte es möglich machen Elemente aus der ersten Hälfte zumindest an den Beginn der zweiten Hälfte zu verschieben...

    mein Problem: nach erase(vi.begin()+1) wird iter ungültig...



  • daersc schrieb:

    mein Problem: nach erase(vi.begin()+1) wird iter ungültig...

    Hast Du mal nachgeschaut, was erase() Dir zurückliefert?

    Und für das, was Du machen möchtest, hast Du einfach den falschen Containertyp gewählt.



  • Was willst du denn mit dem Container machen?
    Mit std::vector zu verschieben ist wie bereits gesagt wurde, nicht sonderlich performant (es muss ne ganze Menge umkopiert werden) - dafür nimmt man üblicherweise andere Container (std::list oder std::deque oder oder oder - je nach dem, was du machen möchtest ^^).

    Also schreib einfach mal, was genau du machen möchtest - also welche Anforderungen du an den Container stellst...

    bb


Anmelden zum Antworten