Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

void g(vector<int>& vi)

{

fill_n(back_inserter(vi),200,7); // добавляет 200 семерок

// в конец vi

}

Б.6.2. Объекты-функции

Многие стандартные алгоритмы принимают в качестве аргументов объекты-функции (или функции), чтобы уточнить способ решения задачи. Обычно эти функции используются в качестве критериев сравнения, предикатов (функций, возвращающих значения типа

bool
) и арифметических операций. Несколько самых общих объектов-функций описано в заголовке
<functional>
стандартной библиотеки.

Рассмотрим следующий пример:

vector<int> v;

// ...

sort(v.begin,v.end,greater<int>); // сортировка v в убывающем

// порядке

Обратите внимание на то, что предикаты

logical_and
и
logical_or
всегда вычисляют оба свои аргумента (в то время как операторы
&&
и
||
— нет).

Б.6.3. Класс pair

В заголовке

<utility>
стандартная библиотека содержит несколько вспомогательных компонентов, включая класс
pair
.

template <class T1,class T2>

struct pair {

typedef T1 first_type;

typedef T2 second_type;

T1 first;

T2 second;

pair; // конструктор по умолчанию

pair(const T1& x,const T2& y);

// копирующие операции:

template<class U,class V> pair(const pair<U,V>& p
);

};

template <class T1, class T2>

pair<T1,T2> make_pair(T1 x, T2 y) { return pair<T1,T2>(x,y); }

Функция

make_pair
упрощает использование пар. Например, рассмотрим схему функции, возвращающей значение и индикатор ошибки.

pair<double,error_indicator> my_fct(double d)

{

errno = 0; // очищаем индикатор ошибок в стиле языка C

// выполняем много вычислений, связанных с переменной d,

// и вычисляем x

error_indicator ee = errno;

errno = 0; // очищаем индикатор ошибок в стиле языка C

return make_pair(x,ee);

}

Этот пример является полезной идиомой. Его можно использовать следующим образом:

pair<int,error_indicator> res = my_fct(123.456);

if (res.second==0) {

// используем res.first

}

else {

// Ой: ошибка

}

Б.7. Потоки ввода-вывода

Библиотека потоков ввода-вывода содержит средства форматированного и неформатированного буферизованного ввода-вывода текста и числовых значений.

Определения потоков ввода-вывода находятся в заголовках

<istream>
,
<ostream>
и т.п. (см. раздел Б.1.1).

Объект класса

ostream
преобразовывает объекты, имеющие тип, в поток символов (байтов).

Объект класса

istream
преобразовывает поток символов (байтов) в объекты, имеющие тип.

Объект класса

iostream
— это поток, который может действовать и как объект класса
istream
, и как объект класса
ostream
. Буфера, изображенные на диаграмме, являются потоковыми буферами (
streambuf
). Если читателям потребуется перейти от потоков класса
iostream
к новым видам устройств, файлов или памяти, они смогут найти их описание в профессиональных учебниках.

  • Читать дальше
  • 1
  • ...
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: