最小/最大範囲を として、または整数のセットをRange
として受け入れる複合コンテナをいくつか作成しました。std::pair
std::set
内部的には、入力のコピーを次のように保存しますvoid *
このコンテナーはサポートしてiterators
おり、set を反復処理する場合と比較して、このコンテナーがどれほど高速であるかに興味がありましたstd::set
。
次のポリシーを使用して、テストのすべての反復ループを記述するようにしました。
- ポストインクリメントなし (遅い)
- コンパイラがループを完全に最適化できないことを確認してください
- 同じものを比較する
私は次のタイミングを持っています: パフォーマンステスト
速度テスト
範囲の実行時間: [ペア]: 13.0522 ミリ秒
範囲の実行時間: [セット]: 272.54 ミリ秒
std::set の実行時間: 438.239 ミリ秒
範囲の実行時間: 通常 ループの場合: 0.000175 ミリ秒
最初
に私は驚きました、そしてあなたも願っています. なぜ私のRange
コンテナは、 のイテレータRange
が bot のイテレータstd::pair
(単純に整数)std::set
と そして、私の実装は、Range::iterator
実際にはすべての演算子を std::set に転送しRange
ますstd::set
。
2番目 に、これを効率的に実装することについてコメントがあります。より良いアプローチがあるかもしれませんか?