演算法 (現代的 C++)
對於現今 C++ 程式設計,我們建議您使用的演算法,在標準樣板程式庫 (STL)。以下是一些重要的範例:
for_each也就是預設的周遊演算法。(而且transform為不可中放置語意。)
find_if也就是預設的搜尋演算法。
sortlower_bound,行事曆及其他預設排序與搜尋演算法。
若要撰寫比較程式,使用嚴格< ,並使用名為 lambda 時您可以。
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迴圈或演算法的呼叫,或多個,而不是手寫迴圈。copytransform, 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 迴圈
範圍為基礎for迴圈是 C + + 11 的語言功能、 不 STL 演算法。但它值得至此問題討論有關迴圈。範圍架構for迴圈是副檔名為for關鍵字,並提供方便又有效率的方式來撰寫迴圈,逐一查看各種值。STL 容器、 字串和陣列是現成的範圍為基礎for迴圈。若要啟用這個新的反覆項目語法,為使用者定義型別,請加入下列支援:
A begin方法會傳回結構的開始處的 iterator, end傳回至結構的結尾的 iterator 的方法。
這些方法的 iterator 的支援: operator*, operator!=,以及operator++ (前置詞版本)。
這些方法可以是成員或獨立的函式。