C++ Программирование в среде С++ Builder 5


             

В библиотеке шаблонов имеется ряд


В библиотеке шаблонов имеется ряд стандартных функциональных объектов, предназначенных для передачи алгоритмам в качестве параметра, задающего конкретную операцию. Вот они:

















































































































Функциональный объект





Операция





Арифметические



plus



сложение х + у



minus



.вычитание х - у



multiplies



умножение х * у



divides



деление х / у



modulus



остаток х % у



negate



смена .знака -х





Отношения



equal to



равенство ==



not equal to



неравенство !=



greater



больше >



less



меньше <



greater equal



больше или равно >=



less equal



меньше или равно <=





Логические



logical and



логическое И &&



logical or



логическое ИЛИ | |



logical not



логическое отрицание !



Например, вызов алгоритма

transform(vec.begin(), vec.endf), vec.begin(),

negate<int> ());

меняет знак всех элементов вектора vec.

Можно привести примеры более сложных функциональных объектов с “памятью”, которые хранят между вызовами информацию о своем текущем состоянии. Определяемые пользователем функциональные объекты часто производятся от шаблонов классов unary_function и binary_function.

Типичным примером функциональнь1х объектов, сохраняющих свое состояние, являются различные генераторы, как, например, генератор случайных чисел.

Вот программа, в которой реализуется совсем простой функциональный объект — генератор чисел Фибоначчи:

///////////////////////////////////////////////////

// FuncObj.cpp: Генератор чисел Фибоначчи.

//

#include <iostream>

#include <algorithm>

#include <vector>

#pragma hdrstop #include <condefs.h>

using namespace std;

class Fibo { // Класс функционального объекта.

int iCur, iNext;

public:

Fibo() { iNext = iCur =1; } // Инициализация состояния.

int operator ()() { // Операция вызова; возвращает

int temp = iCur; // следующий член ряда.

iCur = iNext; iNext = iCur + temp;

return temp;

} };

int main () {

//

// Сначала проверим вручную, как работает класс.

// Fibo fObj ;


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