Verschachtelte Vektoren kopieren und Löschen



  • Hi,

    ich habe folgende (Typ)definitionen:

    typedef std::vector< IntPoint > Path;
    typedef std::vector< Path > Paths;
    
    Paths *subj;
    Paths solution;
    

    Jetzt ist "solution" mit Daten gefüllt, diese sollen nach subj verschoben werden. Mein Lösungsansatz dafür bisher:

    subj=new Paths(solution);
    solution.clear();
    

    Jetzt bin ich mir unsicher: ist das wirklich die schnellste Variante das zu tun? Lässt sich das Kopieren nach "subj" nicht irgendwie vermeiden?

    Und wird in der zweiten Zeile wirklich alles gelöscht, oder bleiben die Elemente in "Path" in der Luft hängen?



  • Squeezer schrieb:

    subj=new Paths(solution);
    solution.clear();
    
    subj = new Paths();
    *subj = std::move(solution);
    

    sollte das gleiche ergebnis haben, allerdings verschoben und nicht kopiert.

    Edit:

    subj = new Paths(std::move(solution));
    

    sollte genauso funktionieren



  • Ich würde mal swap probieren.

    subj = new Paths();
    subj->swap(solution);
    


  • C Newbie schrieb:

    Ich würde mal swap probieren.

    subj = new Paths();
    subj->swap(solution);
    

    Does not invoke any move, copy, or swap operations on individual elements.

    Klingt gut, ich nehme allerdings an, dass der Move-Konstruktor und Move-Assignment-Operator das genauso machen.



  • Warum willst du einen Pointer auf einen STL Container haben? Das ist fast immer eine schlechte Idee! Erst recht mit owning Pointers. Warum nicht einfach

    subj = std::move(solution);
    

    Oder von mir aus swap, sollte auf das gleiche hinaus laufen.


Log in to reply