アルゴリズム (Modern C++)
最新の C++ プログラミングのアルゴリズムを使用することおを標準テンプレート ライブラリ (STL)。いくつかの重要な例は次のとおりです。
for_each、既定の探索アルゴリズムです。(もtransform not ・ イン ・ プレース」での意味をします)。
find_if、検索のデフォルトのアルゴリズムです。
sort、 lower_bound、および並べ替え、アルゴリズムの検索、その他の既定します。
厳密な比較演算子を記述するには、使用<とを使用してラムダの名前場合ことができます。
auto comp = []( const widget& w1, const widget& w2 )
{ return w1.weight() < w2.weight(); }
sort( v.begin(), v.end(), comp );
auto i = lower_bound( v.begin(), v.end(), comp );
ループ
可能な場合は、範囲ベースを使用してforループ アルゴリズムの呼び出し、またはその両方を手動で記述されたループの代わりにします。copy、 transform、 count_if、 remove_if、および他の人と同様に、意図が明白で、簡単にバグを解放するコードを記述することは手書きのループよりもはるかに優れています。また、STL アルゴリズムの多くより効率的に実装の最適化があります。
このような古い C++ の代わりに。
for( auto i = strings.begin(); i != strings.end(); ++i ) {
:::
:::
}
auto i = v.begin();
for( ; i != v.end(); ++i ) {
if (*i > x && *i < y) break;
}
このような現代の C++ を使用します。
for_each( begin(strings), end(strings), []( string& s ) {
:::
:::
} );
auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );
範囲ベースのループ
範囲ベースforループでは、C + + 11 言語機能、STL アルゴリズムではありません。しかし、ここでループについての言及に値する。範囲ベースforループは、拡張機能のforキーワードと値の範囲を反復処理するループを記述するのには、便利で効率的な方法を提供します。STL コンテナー、文字列、および配列は既製の範囲ベースforループします。この新しいイテレーション構文をユーザー定義の種類を有効にするには、次のサポートを追加します。
A begin構造体の先頭に、反復子を取得する方法と、 endメソッドは、構造体の末尾に、反復子を返します。
これらのメソッドは、反復子のサポート: operator*、 operator!=、およびoperator++ (前置バージョン)。
これらのメソッドには、メンバーまたはスタンドアロン関数のいずれかをすることができます。