Современные алгоритмы (C++)
Для современных программирования C++, мы рекомендуем использовать алгоритмы в Библиотеки стандартных шаблонов (STL).Ниже приведены некоторые важные примеры.
for_each, который является алгоритм обхода по умолчанию.(Также transform для семантики не на месте.)
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++ (префиксная версия).
Эти методы могут быть члены или автономных функций.