ist elegant, aber es ist an Ort und Stelle; und std::partition_copy
ist auch nett, aber es braucht zwei Ausgabe-Iteratoren, d. h. Sie müssen mindestens die Anzahl der Elemente, die das Prädikat erfüllen, im Voraus zählen, wenn Sie das gleiche Ausgabe-Array verwenden wollen. Warum gibt es keinen std::partition
oder einen Einzelausgabe-Iterator std::partition_copy
in <algorithm>
?Warum hat std :: partition keine Out-of-Place-Variante?
Antwort
Vermutlich, weil die Funktionalität bereits durch entweder erreicht werden:
- Kopieren des Originalbehälter und mit in-place
partition
. - Dimensionierung des einzelnen Zielcontainers auf die richtige Größe und Verwendung der
begin()
undrbegin()
Iteratoren, um es von vorne und hinten mitpartition_copy
zu füllen.
Ihr zweiter Vorschlag ist eine schlaue Idee, die mir wahrscheinlich nicht eingefallen wäre. –
Beide Vorschläge erfordern viel mehr Zeit als der kombinierte Vorgang; Zumindest müssen Sie die gesamte Eingabe noch einmal wiederholen. Wäre das kein Problem, das eine andere Variante verdient? Außerdem gibt es bereits eine gewisse Redundanz in "
@ein Warum hat 'rbegin' Lösung dieses Problem? Ich kann mir keine vernünftige Out-of-Place-Partition vorstellen, die im Grunde nicht den eigentlichen Trick macht (benutze Output-Iteratoren, die die Elemente konstruieren). Sie brauchen * zwei separate Orte, um in eine nicht vorhandene Partition zu schreiben. – Yakk
Welchen Vorteil hätte dies gegenüber der Erstellung Ihrer eigenen Kopie und 'std :: partition'? – user2357112
@ user2357112: Leistung? ... obwohl, ich denke, man könnte sagen, wenn ich mich um die Leistung kümmern soll, sollte ich '' Code nicht mit beginnen. –
einpoklum