2016-04-09 5 views
2

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?

+1

Welchen Vorteil hätte dies gegenüber der Erstellung Ihrer eigenen Kopie und 'std :: partition'? – user2357112

+0

@ 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

Antwort

3

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() und rbegin() Iteratoren, um es von vorne und hinten mit partition_copy zu füllen.
+0

Ihr zweiter Vorschlag ist eine schlaue Idee, die mir wahrscheinlich nicht eingefallen wäre. –

+0

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 "". Sind Sie sicher, dass dies der eigentliche Grund ist? Schließlich ist dein zweiter Vorschlag nett. – einpoklum

+0

@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