- •1. Динамические структуры данных
- •2. Динамические структуры данных. Линейные списки: Очередь, стек.
- •3. Динамические структуры данных. Деревья
- •4. Классы. Описание классов. Описание объектов. Указатель this.
- •5. Статические элементы класса. Статические поля. Статические методы.
- •6. Дружественная функция. Дружественный класс.
- •7. Деструкторы
- •8. Перегрузка операций. Перегрузка унарных операций
- •9. Перегрузка бинарных операций
- •10. Перегрузка операций присваивания
- •11. Перегрузка операции приведение типа
- •12. Наследование. Ключи доступа. Простое наследование
- •13. Виртуальные методы. Алгоритмы позднего связывания
- •Механизм позднего связывания
- •14. Множественное наследование
- •15. Создание произвольного класса на базе основного
- •16. Обработка исключительных ситуаций. Общий механизм обработки исключений
- •17. Синтаксис исключений. Перехват исключений
- •18. Список исключений функций
- •19. Иерархии исключений
- •20. Исключения в конструкторах и деструкторах
- •21. Преобразование типов. Неявные преобразования типов
- •22. Преобразования типов в выражениях
- •23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast
- •Операция const_cast
- •Операция dynamic_cast
- •24. Повышающее преобразование. Понижающее преобразование
- •25. Преобразование ссылок. Перекрестное преобразование
- •26. Преобразование типа на стадии компиляции. Операция static_cast. Операция reinterpret_cast
- •27. Динамическое определение типа. Операция type_id. Класс type_info
- •28. Потоки. Стандартные потоки. Объекты заголовочного файла iostream
- •29. Правила ввода и вывода величин
- •30. Форматирование данных. Флаги и форматирующие методы. Манипуляторы
- •31. Методы обмена с потоками. Класс iоstream
- •32. Ошибки потоков
- •33. Базовый класс ios. Методы и операции класса ios
- •34. Файловые потоки. Классы для работы с файлами: ifstream, ofstream, fstream
- •35. Строковые потоки. Базовые классы строковых потоков: istringstream, ostringstream, stringstream
- •36. Потоки и типы, определенные пользователем
- •37. Строки. Конструкторы и присваивание строк
- •38. Создание объекта string. Операция присваивания строк
- •39. Операции класса string
- •40. Функции работы со строками. Присваивание и добавление частей строк
- •41. Функции работы со строками. Преобразование строк. Поиск подстрок. Сравнение частей строк
- •42. Функции работы со строками. Получение характеристик строк
- •43. Обратные итераторы. Итераторы вставки. Потоковые итераторы
- •Обратные итераторы
- •Итераторы вставки
- •Потоковые итераторы
- •44. Функциональные объекты. Арифметические функциональные объекты
42. Функции работы со строками. Получение характеристик строк
В классе string определено несколько функций-членов, позволяющих получить длину строки и объем памяти, занимаемый объектом:
size_type size() const; // Количество элементов строки
size_type length() const; // Количество элементов строки
size_type max_size() const; // Максимальная длина строки
size_type capacity() const; // Объем памяти, занимаемый строкой
bool empty() const; // Истина, если строка пустая
43. Обратные итераторы. Итераторы вставки. Потоковые итераторы
Итератор — это обобщение понятия указателя для работы с различными структурами
данных стандартным способом. В стандартной библиотеке итераторы используются для работы с контейнерными классами, потоками и буферами потоков.
Итераторные классы и функции описаны в заголовочном файле <iterator>. При использовании стандартных контейнеров этот файл подключается автоматически.
Прямой итератор поддерживает все операции входных и выходных итераторов и может использоваться везде, где требуются входные или выходные итераторы.
Двунаправленный итератор поддерживает все операции прямого, а также декремент, и может использоваться везде, где требуется прямой итератор.
Итератор произвольного доступа поддерживает все операции двунаправленного, а кроме того, переход к произвольному элементу последовательности и сравнение итераторов.
Итератор может быть действительным (когда он указывает на какой-либо элемент) или недействительным. Итератор может стать недействительным в следующих случаях:
итератор не был инициализирован;
контейнер, с которым он связан, изменил размеры или уничтожен;
итератор указывает на конец последовательности.
Обратные итераторы
Для двунаправленных итераторов и итераторов произвольного доступа определены разновидности, называемые адаптерами итераторов. Адаптер, просматривающий последовательность в обратном направлении, называется reverse_iterator.
Обратный итератор имеет защищенное поле данных, называемое текущим итератором — current. Current на самом деле указывает на элемент, следующий за тем, на который указывает обратный итератор
Итераторы вставки
Итераторы вставки так же, как и обратные, являются адаптерами итераторов.
Они предназначены для добавления новых элементов в начало, конец или произвольное место контейнера. В стандартной библиотеке определено три шаблона классов итераторов вставки, построенных на основе выходных итераторов: back_insert_iterator, front_insert iterator и insert iterator.
Кроме того, определены три функции вставки:
template <class С> back_insert_iterator<C>
back_inserter(C& х);
template <class C> front_insert_terator<C>
front_inserter(C& x);
template <class С class Iter> insert_iterator<C>
inserter(C& x. Iter i);
Здесь С — контейнер, в который требуется вставить элементы. Функция back_1nserter вставляет элементы в конец контейнера, front_inserter — в начало, а inserter — перед элементом, на который ссылается ее аргумент-итератор.
