Boostのany_rangeドキュメントには、次のように書かれています。
基盤となるのは利用可能な最速の実装ですが、インクリメント、デクリメント、アドバンス、イコールなどを実装するために必要な仮想関数呼び出しのコストのため
any_iterator
、のパフォーマンスオーバーヘッドは依然としてかなりのものです。多くの場合、より適切な設計選択は標準形に変換することです。any_range
著者は「標準形」とはどういう意味ですか?誰かが例をあげることができますか?
編集: ここで提案されているように、私はブーストユーザーのメーリングリストで同じ質問をしました。このテキストの原作者であるNeilGrovesは、次のように述べています。
たとえば、範囲をベクトルにコピーします。
はい、これはまさに私がドキュメントを書くときに考えていた代替設計です。any_rangeを反復処理するオーバーヘッドはかなり大きく、具体的な結果タイプをベクトルなどのコンテナーにコピーする場合と比較すると、多くの場合不十分です。ただし、これは常に当てはまるわけではなく、Boost.Rangeの一部のユーザーは、any_rangeインスタンスで動作するアルゴリズムを実装する機能を望んでいます。これは、たとえば、さまざまなコンテナをサポートする共有ライブラリからのアルゴリズムの公開を可能にするために望ましい場合があります。any_rangeを使用することは、範囲を超えるパスの数が少ない場合にも意味がありますが、基になるコンテナのメモリサイズは非常に大きくなります。
多くの場合、パフォーマンスのオーバーヘッドは重要ではありません。私は、any_rangeの使用法が広く採用されるように誰かを誤解させないようにしたかったのです。このクラスの有効な使用法は少ないと思いますが、正確に正しい設計上の選択である場合もあります。やがて、いくつかの追加の説明と例を使用してドキュメントを改善します。