
- •1. Понятие класса. Методы класса. Управление доступом к компонентам.
- •2. Объявление и определение класса. Внешнее определение функций.
- •3. Создание, копирование и удаление объекта.
- •4. Статические компоненты класса. Инициализация статических компонентов класса.
- •5. Наследование. Типы наследования. Виртуальное наследование.
- •6. Виртуальные функции
- •7. Абстрактные классы и чистые виртуальные функции. Интерфейс
- •8. Дружественность. Дружественные классы и функции.
- •9. Вложенные классы. Внутреннее и внешнее определение.
- •10. Шаблоны классов
- •11.Создание экземпляров шаблона. Инстанцирование.
- •12.Шаблоны и наследование.
- •13.Терминология шаблонов.
- •14. Параметры и аргументы шаблона.
- •15. Шаблоны компонентных функций
- •16. Полная специализация шаблонов.
- •17. Частичная специализация шаблонов.
- •18. Перегрузка операций. Основные понятия.
- •19. Перегрузка унарных операций.
- •20. Перегрузка бинарных операций.
- •Int test() {
- •Int test() {
- •Int test() {
- •// Делаем что-то
- •Вопрос 23
- •24. Группировка и композиция исключений. Повторная генерация. Перехват всех исключений.
- •25. Автоматическое управление ресурсами. Методика raii.
- •Void f() { FileOpen("myfile.Txt", "rt"); //здесь выполняем нужную работу с файлом //... }
- •Void f (int a) throw (x2, x3)
- •27. Стандартная библиотека. Организация стандартной библиотеки
- •28. Тип вектора. Вложенные типы. Итераторы. Доступ к элементам
- •29.Тип Вектора. Конструкторы. Операции со стеком. Списочные операции. Размеры и емкость.
- •30. Стандартные контейнеры. Вопросы производительности операций.
- •31. Процесс разработки по. Цели и этапы проектирования.
- •32. Процесс разработки по. Выявление классов. Определение операций.
- •33. Процесс разработки по. Определение взаимосвязей. Определение интерфейсов.
- •Этап 3: выявление зависимостей
- •Этап 4: определение интерфейсов
- •34. Паттерны проектирования. Основные паттерны.
- •35. Тестирование по. Методы тестирования.
27. Стандартная библиотека. Организация стандартной библиотеки
Стандартная библиотека
Общая структура
Стандартная библиотека C++ включает в себя набор средств, которые должны быть доступны для любой реализации языка, чтобы обеспечить программистам удобное пользование языковыми средствами и создать базу для разработки как прикладных приложений самого широкого спектра, так и специализированных библиотек. Стандартная библиотека С++ включает в себя часть стандартной библиотеки C. Стандарт C++ содержит нормативную ссылку на стандарт C от 1990 года и не определяет самостоятельно те функции стандартной библиотеки, которые заимствуются из стандартной библиотеки C.
Доступ к возможностям стандартной библиотеки C++ обеспечивается с помощью включения в программу (посредством директивы #include) соответствующих стандартных заголовочных файлов. Средства стандартной библиотеки объявляются как входящие в пространство имён std. Заголовочные файлы, имена которых соответствуют шаблону «cX», где X — имя заголовочного файла стандартной библиотеки C без расширения (cstdlib, cstring, cstdio и пр.), содержат определения, соответствующие данной части стандартной библиотеки C, при этом программист может воспользоваться заголовочными файлами с именами по шаблону «cX.h» (добавлено стандартное расширение заголовочных файлов C «.h»), в которых те же средства определены как относящиеся к глобальному пространству имён.
Организация стандартной библиотеки
Приведем список заголовочных файлов STL, сгруппированный по функциональности
28. Тип вектора. Вложенные типы. Итераторы. Доступ к элементам
Контейнерный тип vector используется как пример законченного стандартного контейнера. Рассмотрим типы, итераторы и доступ к элементам контейнера
памятью.
Об итераторах можно думать, как об указателях на элементы контейнеров.
Доступ к элементам
Доступ к отдельному элементу вектора можно получить, используя операции, описанные в таблице ниже. Первый элемент имеет индекс 0, последний — size() - 1
Выражение |
Возвращаемый тип |
Проверка границы? |
v.at(i) |
T& или const T& для элемента i |
Возможен выброс исключения out_of_range |
v[i] |
T& или const T& для элемента i |
Неопределенное поведение при i >= v.size() |
v.front() |
T& или const T& для первого элемента |
Неопределенное поведение при v.empty() == true |
v.back() |
T& или const T& для последнего элемента |
Неопределенное поведение при v.empty() == true |
Где v — это объект типа (м.б const) vector<T>, а i — индекс необходимого элемента вектора.
29.Тип Вектора. Конструкторы. Операции со стеком. Списочные операции. Размеры и емкость.
Рассмотрим контейнер типа vector: конструкторы, операции со стеком, списочные операции, размеры и емкость
Конструкторы:
|
Метод |
Описание |
Сложность |
|
vector::vector |
Конструктор по умолчанию. Не принимает аргументов, создает новый экземпляр вектора |
O(1) (выполняется за константное время) |
vector::vector(const vector& c) |
Конструктор копии по умолчанию. Создает копию вектора c |
O(n) (выполняется за линейное время, пропорциональное размеру вектора c) |
|
vector::vector(size_type n, const T& val = T()) |
Создает вектор с n объектами. Если val объявлена, то каждый из этих объектов будет инициализирован ее значением; в противном случае объекты получат значение конструктора по умолчанию типа T. |
O(n) |
|
vector::vector(input_iterator start, input_iterator end) |
Cоздает вектор из элементов, лежащих между start и end |
O(n) |
Размер и емкость
vector::empty |
Возвращает true, если вектор пуст |
O(1) |
vector::size |
Возвращает количество элементов в вектора |
O(1) |
vector::max_size |
Возвращает максимально возможное количество элементов в векторе |
O(1) |
vector::reserve |
Устанавливает минимально возможное количество элементов в векторе |
O(n) |
vector::capacity |
Возвращает количество элементов, которое может содержать вектор до того, как ему потребуется выделить больше места. |
O(1) |
vector::shrink_to_fit
|
Уменьшает количество используемой памяти за счет освобождения неиспользованной |
O(1) |