Шаг 112.
Библиотека STL.
Примеры передачи функций в аргументах алгоритмов (окончание)

    На этом шаге мы рассмотрим другой пример передачи функций в аргументах алгоритмов.

    Существует несколько вариантов применения пользовательских функций алгоритмами; в одних случаях передача функция обязательна, в других - нет. В частности, пользовательская функция может определять критерий поиска, критерий сортировки или преобразование, применяемое при копировании элементов из одной коллекции в другую.

    Еще пример:

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <conio.h> //необходимо для getch()
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

template <class T>
inline void PRINT_ELEMENTS (const T& coll, const char* optcstr="")
{
  typename T::const_iterator pos;
  std::cout << ToRus(optcstr);
  for (pos=coll.begin(); pos!=coll.end(); ++pos) {
    std::cout <<*pos <<' ';
  }
  std::cout << std::endl;
}

std::string ToRus(const std::string &in)
{
  char *buff = new char [in.length()+1];
  CharToOem(in.c_str(),buff);
  std::string out(buff);
  delete [] buff;
  return out;
}
void print (int elem)
{
  cout << elem << ' ';
}

int square (int value)
{
  return value*value;
}

int main(int argc, char* argv[])
{
  std::set<int> coll1;
  std::vector<int> coll2;

  // Вставка элементов со значениями от 1 до 9 в coll1
  for (int i=1; i<=9; ++i) {
    coll1.insert(i);
  }

  PRINT_ELEMENTS(coll1, "Инициализация:\n");
  // Преобразование каждого элемента при копировании из colll в col12
  // - square transformed values
  std::transform (coll1.begin(),coll1.end(), // Источник
    std::back_inserter(coll2), // Приемник
    square);  // Операция
  PRINT_ELEMENTS(coll2,"Квадраты:\n");

  getch();
  return 0;
}
//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    В приведенном примере функция square() возводит в квадрат каждый элемент coll1 при его копировании в coll2 (рисунок 1). Результат выполнения программы выглядит так:


Рис.1. Результат работы приложения

    Работа алгоритма transform() приведена на рисунке 2:


Рис.2. Работа алгоритма transform()

    Со следующего шага мы начнем рассматривать предикаты.




Предыдущий шаг Содержание Следующий шаг