算法(现代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-cn,VS.110).gif基于范围的循环

基于范围的for循环是 C + + 11 语言功能,这不是 STL 算法。 但重视提及在本讨论有关循环。 基于范围的for循环是扩展的for关键字和提供方便、 高效的方法来编写循环,循环访问值的范围。 STL 容器、 字符串和数组是现成的基于范围的for循环。 要使用这种新的迭代语法,您的用户定义类型,请添加以下支持:

  • A begin结构开始处到迭代器的方法和end结构的末尾返回迭代器的方法。

  • 这些方法将迭代器中的支持: operator*, operator!=,和operator++ (前缀版本)。

这些方法可以是成员或独立的函数。

请参见

其他资源

返回C++ (现代C++)的欢迎

C++语言参考

标准C++库参考