logo
шпоры по ООП

84.Способы хранения элементов в контейнерах шаблонов fds.

Контейнеры могут содержать целые и вещественные числа, строки, структуры, классы, типы, определенные пользователями, и любые объекты C++.

Контейнеры реализуются с помощью шаблонов. Вы можете передавать в шаблон любой тип объекта, который хотите включить в контейнер.

Библиотеку класса контейнера можно разделить на две категории: фундаментальные структуры данных FDS (Fundamental Data Structures) и абстрактные типы данных ADT (Abstract Data Types)

Структуры FDS - это контейнеры нижнего уровня, реализующие структуры памяти. Каждая FDS имеет фундаментальные функции добавления и отсоединения.

Итератор (от англ. iterator) — объект, позволяющий программисту перебирать все элементы коллекции без учёта её особенностей реализации.

Главное предназначение итераторов заключается в предоставлении возможности пользователю обращаться к любому элементу контейнера при сокрытии внутренней структуры контейнера от пользователя. Это позволяет контейнеру хранить элементы любым способом при допустимости работы пользователя с ним как с простой последовательностью или списком. Проектирование класса итератора обычно тесно связано с соответствующим классом контейнера. Обычно контейнер предоставляет методы создания итераторов.

Храните в контейнерах только значения или интеллектуальные указатели.

Храните в контейнерах объекты-значения. Контейнеры полагают, что их содержимое имеет тип значения, включая непосредственно хранящиеся значения, интеллектуальные указатели и итераторы.

Наиболее распространенное использование контейнеров— для непосредственного хранения значений (например, vector<int>, set<string>). В случае контейнеров указателей, если контейнер владеет объектами, на которые указывает, то лучше использовать контейнер интеллектуальных указателей со счетчиком ссылок (например, list<shared_ptr<Widget> >); в противном случае можно выбрать контейнер обычных указателей (например, list<Widget*>) или иных значений, подобных указателям — таких как итераторы (например, list<vector<Widget>::iterators).

Итератор - это указатель особого типа на элемент, хранящийся в контейнере. Применение оператора * приведет к разыменованию и получению доступа к значению элемента. А использование операторов ++ и - позволит получить указатель на следующий и предыдущий элемент хранимый в контейнере.