2016-04-09 7 views
2

std::partitionは素晴らしいですが、インプレースです。 std::partition_copyもうまくいきますが、2つの出力イテレータが必要です。つまり、同じ出力配列を使用する場合は、少なくとも述語を満たす要素の数を事前に数えなければなりません。アウトオブプレイスstd::partition、または単一出力イテレータstd::partition_copyが、<algorithm>に存在しないのはなぜですか?おそらくstd :: partitionにアウトオブプレイスバリアントがないのはなぜですか?

+1

これはあなた自身のコピーと 'std :: partition'それに何の利点がありますか? – user2357112

+0

@ user2357112:パフォーマンス?...しかし、私はあなたがパフォーマンスを気にするならば、まずは ' 'コードを使うべきではないと言えるでしょう。 – einpoklum

答えて

3

機能がすでにいずれかによって達成することができるので:

  • は元の容器をコピーし、その場でpartition使用。
  • 単一の宛先コンテナを正しいサイズにサイジングし、begin()rbegin()イテレータを使用して、前面から入力し、背面にpartition_copyと入力します。
+0

あなたの2番目の提案は、おそらく私には起こり得なかった巧妙な考えです。 –

+0

どちらの提案も、組み合わせた操作よりも多くの時間を必要とします。最低でも入力全体をもう一度繰り返す必要があります。これは別の変種に匹敵する問題ではないでしょうか?また、 ''には既に冗長性があります。これが実際の理由だと確信していますか?最後に、あなたの2番目の提案は素晴らしいです。 – einpoklum

+0

@einなぜ 'rbegin'ソリューションに問題がありますか?基本的にrbeginのやり方(要素を構成する出力イテレータを使用する)をしない、妥当なアウトオブパーティションを考えることはできません。アウトオブプレースのパーティションに書き込むには、2つの別々の場所が必要です。 – Yakk

関連する問題