、一つは通常のコードのM * N
枚が必要になりますが、「接着剤」として機能するイテレータで、これはコードのM + N
枚に減少させることができます。
例:3つのコンテナ
std::list<int> l = { 0, 2, 5, 6, 3, 1 }; // C++11 initializer lists
std::vector<int> v = { 0, 2, 5, 6, 3, 1 }; // C++11 initializer lists
std::array<int, 5> a = { 0, 2, 5, 6, 3, 1 };
auto l_contains1 = std::find(l.begin(), l.end(), 1) != l.end();
auto v_contains5 = std::find(v.begin(), v.end(), 5) != v.end();
auto a_contains3 = std::find(a.begin(), a.end(), 3) != a.end();
auto l_count1 = std::count(l.begin(), l.end(), 1);
auto v_count5 = std::count(v.begin(), v.end(), 5);
auto a_count3 = std::count(a.begin(), a.end(), 3);
の実行2つのアルゴリズムにのみ、2つの異なるアルゴリズムを呼び出し、そして唯一の3つのコンテナのコードを持っています。各コンテナは、begin()
とend()
イテレータをコンテナに渡します。答えを生成するコードは3 * 2
行ですが、書かれる必要があるのは3 + 2
の機能だけです。
より多くのコンテナとアルゴリズムでは、STLに5つのシーケンスコンテナ、8つの連想コンテナ、3つのコンテナアダプタがあり、ほぼ80のアルゴリズムが存在するコードでのコンビナトリアル爆発が大幅に減少します一人で<algorithm>
で(でも<numeric>
のものを数えていない)あなたが持っているということだけ16 + 80
代わり16 * 80
のように、コード内の13倍の減少! (もちろん、すべてのアルゴリズムがすべてのコンテナで意味をなさないわけではありませんが、その点は明確でなければなりません)。
反復子は5種類(入力、出力、順方向、双方向、およびランダムアクセス)に分けることができ、そしていくつかのアルゴリズムは、イテレータ機能に応じて特殊なバージョンに委譲します。これにより、コードの削減はいくらか軽減されますが、最適化されたアルゴリズムを選択して効率を大幅に改善します。 STLは、分離に完全に一致していないこと
注:std::list
自体をソートするために、実装の特定の詳細を使用して独自sort
メンバ関数を有し、そしてstd::string
が実装されている可能性が最もそのメンバ関数アルゴリズムの膨大な数を有します非メンバ関数として。
あなたが書いた単語は理解できませんでした。 : – Mehrdad
私はコンテナやイテレータなどのクラスが違うので混乱の原因になって申し訳ありません。テンプレートを使用して1つのクラスにすべてを入れ、コンテナにデータがあり、それか、彼らは別々の?違うイテレータがあるなぜ私が意味する、アルゴリズムなどである理由 – Rahul
[この質問](http://stackoverflow.com/questions/10380612/principles-behind-stl-design)はあなたにいくつかを与えるかもしれない。修正ポインタ[このインタビュー](http://www.sgi.com/tech/strd/drdobbs-interview.html)、STLの作成者であるAlex Stephanovにもいくつかの洞察が含まれています –