共用方式為


演算法 (現代的 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; }  );

Hh438471.collapse_all(zh-tw,VS.110).gif範圍為基礎,for 迴圈

範圍為基礎for迴圈是 C + + 11 的語言功能、 不 STL 演算法。但它值得至此問題討論有關迴圈。範圍架構for迴圈是副檔名為for關鍵字,並提供方便又有效率的方式來撰寫迴圈,逐一查看各種值。STL 容器、 字串和陣列是現成的範圍為基礎for迴圈。若要啟用這個新的反覆項目語法,為使用者定義型別,請加入下列支援:

  • A begin方法會傳回結構的開始處的 iterator, end傳回至結構的結尾的 iterator 的方法。

  • 這些方法的 iterator 的支援: operator*, operator!=,以及operator++ (前置詞版本)。

這些方法可以是成員或獨立的函式。

請參閱

其他資源

歡迎回到 C++ (現代的 C++)

C + + 語言參考

標準 C++ 程式庫參考