Контейнеры из стандартной библиотеки языка С++, такие как vector и map, являются неинтрузивными; иначе говоря, они не требуют информации о типах данных, использованных как их элементы. Это позволяет обобщить их для практически всех типов (как встроенных, так и пользовательских), поскольку эти типы допускают операцию копирования.
Также вам может показаться, что такая тема как
http://www.aaccent.ru/promotion/ никак не связана и даже не тематична с программированием. Хотя, может быть и связана.
В любом случае все-таки зайдите на сайт aaccent.ru
Тема продвижение сайтов Казань там представлена весьма широко.
Существует и другая разновидность контейнеров — интрузивные контейнеры (intrusive container), популярные в языках C и C++. Для того чтобы проиллюстрировать использование структур, указателей и свободной памяти, будем использовать неинтрузивный список.
Определим двухсвязный список с девятью операциями.
void init(struct List* lst); /* инициализирует lst пустым */ struct List* create(); /* создает новый пустой список
в свободной памяти */ void clear(struct List* lst); /* удаляет все элементы списка 1st */ void destroy(struct List* lst); /* удаляет все элементы списка 1st,
а затем удаляет сам 1st */
void push_back(struct List* lst, struct Link* p); /* добавляет
элемент p в конец списка 1st */
void push_front(struct List*, struct Link* p); /* добавляет элемент p
в начало списка 1st */
/* вставляет элемент q перед элементом p in 1st: */
void insert(struct List* lst, struct Link* p, struct Link* q);
struct Link* erase(struct List* lst, struct Link* p); /* удаляет
элемент p из списка 1st */
/* возвращает элемент, находящийся за n до или через n узлов после узла p:*/ struct Link* advance(struct Link* p, int n);
Мы хотим определить эти операции так, чтобы их пользователям было достаточно использовать только указатели List* и Link*. Это значит, что реализации этих функций можно кардинально изменять, не влияя на работу их пользователей. Очевидно, что выбор имен был сделан под влиянием библиотеки STL. Структуры List и Link можно определить очевидным и тривиальным образом.
struct List {
struct Link* first; struct Link* last;
};
struct Link { /* узел двухсвязного списка */
struct Link* pre; struct Link* suc;
};
Опубликовал katy
May 01 2015 11:26:25 ·
0 Комментариев ·
6079 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.