С++ для начинающих




.Пример шаблона функции


В этом разделе приводится пример, показывающий, как можно определять и использовать шаблоны функций. Здесь определяется шаблон sort(), который затем применяется для сортировки элементов массива. Сам массив представлен шаблоном класса Array (см. раздел 2.5). Таким образом, шаблоном sort() можно пользоваться для сортировки массивов элементов любого типа.

В главе 6 мы видели, что в стандартной библиотеке C++ определен контейнерный тип vector, который ведет себя во многом аналогично типу Array. В главе 12 рассматриваются обобщенные алгоритмы, способные манипулировать контейнерами, описанными в главе 6. Один из таких алгоритмов, sort(), служит для сортировки содержимого вектора. В этом разделе мы определим собственный “обобщенный алгоритм sort()” для манипулирования классом Array,  упрощенной версии алгоритма из стандартной библиотеки C++.

Шаблон функции sort() для шаблона класса Array определен следующим образом:

template <class elemType>

   void sort( Array<elemType> &array, int low, int high ) {

   if ( low < high ) {

      int lo = low;

      int hi = high + 1;

      elemType elem = array[lo];

      for (;;) {

         while ( min( array[++lo], elem ) != elem && lo < high ) ;

         while ( min( array[--hi], elem ) == elem && hi > low ) ;

         if (lo < hi)

            swap( array, lo, hi );

         else break;

      }

      swap( array, low, hi );

      sort( array, low, hi-1 );

      sort( array, hi+1, high );

   }

}

В sort() используются две вспомогательные функции: min() и swap(). Обе они должны определяться как шаблоны, чтобы иметь возможность обрабатывать любые типы фактических аргументов, с которыми может быть конкретизирован шаблон sort(). min() определена как шаблон функции для поиска минимального из двух значений любого типа:

template <class Type>

   Type min( Type a, Type b ) {

      return a < b ? a : b;

}

swap() – шаблон функции для перестановки двух элементов массива любого типа:




Содержание  Назад  Вперед