Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы - Программирование (2я часть).docx
Скачиваний:
6
Добавлен:
26.09.2019
Размер:
36.37 Кб
Скачать

Определение списка, стека, очереди.

Самый простой способ связать множество элементов – сделать так, чтобы каждый элемент ссылался на следующий. Такую динамическую структуру называют однонаправленным (односвязанным) линейным списком. Пример:

struct one_way_list_element

{

int data;

one_way_list_element * next; }

Если каждый элемент структуры содержит ссылку как на следующий, так и на предыдущий, то это двунаправленный (двусвязанный) линейный список. Пример:

struct two_way_list_element

{

int data;

two_way_list_element * previous;

two_way_list_element * next; }

Под стеком понимается структура данных при которой действует принцип LIFO – Last In First Out (последний пришел – первый ушел). Добавление и удаление элементов происходит с одного конца.

Под очередью понимается структура данных при которой действует принцип FIFO – First In First Out (первый пришел – первый ушел). Добавление элементов происходит с конца, удаление выход из очереди) – с начала.

Реализация динамических структур в stl.

Стандартная библиотека шаблонов (STL) (англ. Standard Template Library) — набор согласованных обобщённых алгоритмов, контейнеров, средств доступа к их содержимому и различных вспомогательных функций в C++.

В библиотеке выделяют пять основных компонентов:

  • Контейнер (container) — хранение набора объектов в памяти;

  • Итератор (iterator) — обеспечение средств доступа к содержимому контейнера;

  • Алгоритм (algorithm) — определение вычислительной процедуры;

  • Адаптер (adaptor) — адаптация компонентов для обеспечения различного интерфейса;

  • Функциональный объект (functor) — сокрытие функции в объекте для использования другими компонентами.

Динамические структуры:

vector (односвязанный список)

queue (обычная очередь)

deque (двунаправленная очередь, с обоих концов вставляем/удаляем элементы)

[+] — произвольный доступ по индексу к любому элементу

[-] — время на добавление в середину линейно зависит от размера контейнера(=> долго сортируется, а без упорядоченности поиск только перебором)

list (двусвязанная список)

[+] — константные по времени вставка и удаление из середины

[-] — доступ к элементам только последовательный

set (хранилище для уникальных элементов по их ключам, типа словарик)

[+] — внутренняя поддержка упорядоченности (=> быстрый поиск)

[-] — логарифмическая по времени вставка

Принцип наследования и его реализация в С++.

Наследование это один из трех основных принципов ООП (Объектно-Ориентированного Программирования), таких как: Инкапсуляция, Полиморфизм и Наследование. Принцип наследования в ООП реализуется с помощью механизма классов. Служит для наследования классов друг от друга.

Понятие наследования. Базовый и порожденные классы. Ключи доступа.

Это возможность создания иерархии классов, в которой потомки (производные классы, наследники) перенимают элементы своих предков (родителей, базовых классов), могут переопределять их и добавлять новые.

Пример описание наследования:

class base_class { … }

class children_class : [ключ доступа] base_class { ... }

Ключ доступа это модификатор для настройки наследования, по умолчанию он private (в этом случае говорят о защищенном наследовании). Он понижает статуса доступа public и protected эементов базового класса до private, то есть методы и поля базового класса не будут видны снаружи класса-наследника. Ключ public не изменяет статуса доступа элементов базового класса. Ключ protected понижает статус базовых элементов до protected.