算法(现代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循环是 C + + 11 语言功能,这不是 STL 算法。 但重视提及在本讨论有关循环。 基于范围的for循环是扩展的for关键字和提供方便、 高效的方法来编写循环,循环访问值的范围。 STL 容器、 字符串和数组是现成的基于范围的for循环。 要使用这种新的迭代语法,您的用户定义类型,请添加以下支持:
A begin结构开始处到迭代器的方法和end结构的末尾返回迭代器的方法。
这些方法将迭代器中的支持: operator*, operator!=,和operator++ (前缀版本)。
这些方法可以是成员或独立的函数。