Ich habe vector<vector<int> > Y
. Ich möchte die Untervektoren (nennen Sie es y) in Y in ein vector<int>
zusammenführen. Aber ich möchte sie nicht sortieren, d. H. Sie in der Reihenfolge ihres Auftretens zusammenführen. Wie würde ich das effizient machen, vielleicht mithilfe von STL-Algorithmen? Die std::merge
-Methode verschmilzt durch Sortieren, was ich nicht will.
Bearbeitungen: Was ich will, ist: gegeben {{1,6,5}, {5,3-1,77}, {0}, ...} zurück {1,6,5,5,3, -1,77, 0, ...}
Das Wort dafür ist Verkettung oder flach :
%Vor%Oder, tatsächlich einfacher:
%Vor% c
enthält jetzt 1,2,3,9,0, -7
Sie können dies verallgemeinern, um mit Ihrem verschachtelten Container umzugehen:
%Vor% Wenn Sie Elemente vom ersten Container in den letzten verschieben möchten (falls die Elemente nur verschiebbar oder teuer zu kopieren sind), verwenden Sie std::move
mit std::back_inserter
oder wenden Sie std::make_move_operator
auf jeden Quelleniterator an.
Sehen Sie es live auf Coliru
Zunächst hatte ich erwartet, dass Sie nach einer variadischen Lösung suchen: Lassen Sie mich demonstrieren, wie Sie dies viel allgemeiner machen können, also können Sie sagen:
%Vor%Tatsächlich habe ich es so allgemein gehalten, dass Sie heterogene Sammlungen in "willkürliche" Container verketten:
%Vor% Sie werden (zu Recht) erwarten, dass to_vector
nur eine Bequemlichkeitsverkürzung für concatenate<std::vector<...>>
ist. Hier ist der volle Monty, sehen Sie live auf Coliru und ideone :
Ausgabe:
%Vor%Im Vergleich zur Lösung von @ not-sehe hat dies einige Leistungsvorteile:
Auf der Unterseite funktioniert es nur mit Vektor, nicht Deque oder Liste.