Поделиться через


Современные алгоритмы (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; }  );

Hh438471.collapse_all(ru-ru,VS.110).gifНа основе диапазона циклы

На основе диапазона for цикла является C ++ 11 языка, не алгоритм STL.Однако заслуживает упоминание в этой дискуссии о циклах.На основе диапазона for циклы имеют расширение for ключевое слово и предоставляют удобный и эффективный способ написания циклы, итерации диапазон значений.Готовые для контейнеров STL, строк и массивов на основе диапазона for циклы.Чтобы включить этот новый синтаксис для определяемого пользователем типа, добавьте поддержку следующих возможностей:

  • A begin метод, который возвращает итератор начала структуры и end метод, который возвращает итератор конца структуры.

  • Поддержка итератор для этих методов: operator*, operator!=, и operator++ (префиксная версия).

Эти методы могут быть члены или автономных функций.

См. также

Другие ресурсы

Добро пожаловать в C++ (современные C++)

Справочник по языку C++

Справочник по стандартной библиотеки C++