front_insert_iterator‹Container›& operator*() {return *this;}

 front_insert_iterator‹Container›& operator++() {return *this;}

 front_insert_iterator‹Container›& operator++(int) {return *this;}

};

template ‹class Container›

front_insert_iterator‹Container› front_inserter(Container& x) {

 return front_insert_iterator‹Container›(х);

}

template ‹class Container›

class insert_iterator: public output_iterator {

protected:

 Container& container;

 Container::iterator iter;

public:

 insert_iterator(Container& x, Container::iterator i) : container (x), iter(i) {}

 insert_iterator‹Container›& operator=(const Container::value_type& value) {

  iter = container.insert(iter, value);

  ++iter;

  return *this;

 }

 insert_iterator‹Container›& operator*() {return *this;}

 insert_iterator‹Container›& operator++() {return *this;}

 insert_iterator‹Container›& operator++(int) {return *this;}

};

template ‹class Container, class Iterator›

insert_iterator<Container› inserter(Container& x, Iterator i) {

 return insert_iterator‹Container›(x, Container::iterator(i));

}

Адаптеры функций (Function adaptors)

Функциональные адаптеры работают только с классами функциональных объектов с определёнными типами параметров и типом результата.

Отрицатели (Negators)

Отрицатели not1 и not2 берут унарный и бинарный предикаты соответственно и возвращают их дополнения.

template ‹class Predicate›

class unary_negate: public unary_function‹Predicate::argument_type, bool› {

protected:

 Predicate pred;

public:

 unary_negate(const Predicate& x): pred(x) {}

 bool operator()(const argument_type& x) const {return !pred(x);}

};

template ‹class Predicate›

unary_negate‹Predicate› not1(const Predicate& pred) {

 return unary_negate‹Predicate›(pred);

}

template ‹class Predicate›

class binary_negate: public binary_function‹Predicate::first_argument_type, Predicate::second_argument_type, bool› {

protected:

 Predicate pred;

public:

 binary_negate(const Predicate& x): pred(x) {}

 bool operator()(const first_argument_type& x, const second_argument_type& y) const {

  return !pred(x, y);

 }

};

template ‹class Predicate›

binary_negate‹Predicate› not2(const Predicate& pred) {

 return binary_negate‹Predicate›(pred);

}

Привязки (Binders)

Привязки bind1st и bind2nd берут функциональный объект f двух параметров и значение x и возвращают функциональный объект одного параметра, созданный из f с первым или вторым параметром соответственно, связанным с х.

template ‹class Predicate›

class binder1st: public unary_function {

protected:

 Operation op;

 Operation::first_argument_type value;

public:

 binder1st(const Operation& x, const Operation::first_argument_type& y) : op(x), value (y) {}

 result_type operator()(const argument_type& x) const {

  return op(value, x);

 }

};

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату