3. Пример программы
#include <vector>
#include <algorithm>
#include <fstream>
int main(){
std::ifstream fin("input.txt");
std::ofstream fout("output.txt");
Считать из файла input.txt массив
целых чисел, разделенных
пробельными символами.
Отсортировать их и записать в
файл output.txt.
std::vector<int> v;
}
std::copy(std::istream_iterator<int>(fin),
std::istream_iterator<int>(),
std::inserter(v, v.end()));
std::sort(v.begin(), v.end());
std::copy(v.begin(),
v.end(),
std::ostream_iterator<int>(fout, " "));
return 0;
4. Структура стандартной библиотеки С++
Стандартная библиотека шаблонов (STL - Standard
Template Library)
библиотека для работы с потоками данных
обработка исключений
стандартная библиотека языка С
некоторые дополнительные определения типов,
операторов, функций
•заголовочный файл пишется без расширения;
•библиотеки языка С начинаются с буквы с (вместо
math.h используется cmath);
•Стандартная библиотека С++ объявлена в
пространстве имѐн std.
5. Ввод-вывод данных
iostream - библиотека для работы с потоками
данных. Объявлена в заголовочных файлах ios,
fstream, iostream и др. Предоставляет
следующие элементы:
Базовые
шаблонные классы
конкретизированные шаблонные классы
Стандартные объекты
Манипуляторы
Чаще всего работают со стандартными
объектами (cin, cout)
6. Компоненты STL
алгоритм (algorithm): определяет вычислительную
процедуру.
контейнер (container): управляет набором объектов
в памяти.
итератор (iterator): обеспечивает для алгоритма
средство доступа к содержимому контейнера.
функциональный объект (function object):
инкапсулирует функцию в объекте для
использования другими компонентами.
адаптер (adaptor): адаптирует компонент для
обеспечения различного интерфейса.
7. Контейнеры
Контейнером называют тип данных,
предназначенный для хранения объектов
(обычно одного типа).
Последовательные контейнеры:
•Вектор
•Список
•Двусторонняя очередь
Ассоциативные контейнеры:
•Множество
•Хеш-таблица
•Множество с повторами
•Хеш-таблица с повторами
8. Итераторы
Итератор – объект, предоставляющий доступ к
элементам контейнера. Обладает семантикой указателя.
Основные свойства итератора:
Operator разыменования *
Оператор инкремента ++
Метод begin() контейнера указывает на первый
итератор
Метод end() контейнера указывает за последний
итератор
Контейнеры содержат объекты, на которые указывают
итераторы из полуинтервала [begin(), end())
9. Примитивы STL:
операторы сравнения
Для поддержки всех операторов сравнения
достаточно
Подключить
библиотеку utility
Перегрузить операторы == и <.
Реализация остальных операторов определяется
через == и <.
Операторы сравнения определены в
пространстве имен std::rel_ops
10. Примитивы STL:
упорядоченная пара
template <class T1, class T2> struct pair {
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair() : first(T1()), second(T2()) {}
pair(const T1& x, const T2& y) : first(x), second(y) {}
template <class U, class V> pair (const pair<U,V> &p) :
first(p.first), second(p.second) { }
};
// для создания упорядоченной пары предлагается функция
template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y) {
return ( pair<T1,T2>(x,y) );
}
11. Примитивы STL:
функторы
// классы для определения функторов
template <class Arg, class Result>
struct unary_function {
typedef Arg argument_type;
typedef Result result_type;
};
template <class Arg1, class Arg2, class Result>
struct binary_function {
typedef Arg1 first_argument_type;
typedef Arg2 second_argument_type;
typedef Result result_type;
};