На этом шаге мы приведем текст двух вспомогательных функций, которые будут использоваться в дальнейших примерах.
В следующих шагах приводятся подробные описания всех алгоритмов. Для каждого алгоритма дается минимум один пример. Следующие вспомогательные функции упрощают код примеров, чтобы вы могли сосредоточиться на наиболее содержательных аспектах:
#ifndef ALGOSTUFF_HPP #define ALGOSTUFF_HPP #include <iostream> #include <vector> #include <deque> #include <list> #include <set> #include <map> #include <string> #include <algorithm> #include <functional> #include <numeric> // PRINT_ELEMENTS() // - вывод необязательной строки C, за которой выводятся // - все элементы коллекции coll, разделенные пробелами. template <class T> inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="") { typename T::const_iterator pos; std::cout << optcstr; for (pos=coll.begin(); pos!=coll.end(); ++pos) { std::cout << *pos << ' '; } std::cout << std::endl; } // INSERT_ELEMENTS (collection, first, last) // - заполнение коллекции значениями от first до last // - ВНИМАНИЕ: интервал НЕ ЯВЛЯЕТСЯ полуоткрытым template <class T> inline void INSERT_ELEMENTS (T& coll, int first, int last) { for (int i=first; i<=last; ++i) { coll.insert(coll.end(),i); } } #endif //
Сначала в файл agostuff.hpp включаются все заголовочные файлы, которые могут быть задействованы в примерах, чтобы их не пришлось включать отдельно. Затем определяются две вспомогательные функции.
На следующем шаге мы рассмотрим алгоритм for_each.