Я не смог найти слишком много информации о них в Интернете. Что они и когда они обычно используются?
Спасибо.
Я не смог найти слишком много информации о них в Интернете. Что они и когда они обычно используются?
Спасибо.
Интрузивный список - это тот, где указатель на следующий список node хранится в той же структуре, что и данные node. Обычно это "Плохая вещь", поскольку она связывает данные с конкретной реализацией списка. Большинство библиотек классов (например, стандартная библиотека С++) используют неинтрузивные списки, где данные ничего не знают о реализации списка (или другого контейнера).
Мне действительно нравится интрузивная модель
Интрузивный ХОРОШИЙ
Вам просто нужно знать, что вы делаете (что верно для любого контейнера)
Списки интрузий - это списки, в которых сами объекты являются головками или ячейками списков. Это хорошие или плохие вещи в зависимости от контекста.
Внутри некоторого определенного модуля (небезопасная группа классов, работающих вместе) это может быть ЛУЧШЕЕ среднее для установления связей между классами. Они разрешают беззатратное прямое и полное управление общими отношениями, такими как unicity (например: яблоки не повторяют два раза в яблочных словах, и для этого не нужен какой-либо ключ, а яблоки не принадлежат к двум отдельным деревьям), они являются судоходными в обоих направлениях (прямые access к appletree с учетом яблока и яблок с некоторыми яблоко). Все основные операции: O (1) (нет поиска в каком-либо внешнем контейнере).
Интрузивный список ОЧЕНЬ ПЛОХО между двумя модулями. Поскольку они будут связаны друг с другом, а обоснование модулей - это управление независимостью кода.
Ниже приведено краткое описание, которое также подходит для списков:
Объект, который нужно сохранить, содержит дополнительную информацию, позволяющую интегрировать в контейнер. Пример:
struct Node { Node* next; // additional Node* prev; // information T data; }1. Плюсы:
- хранит сами объекты.
- не требует управления памятью.
- Итерация выполняется быстрее.
- лучшие гарантии исключений.
- предсказуемость при вставке и удалении объектов. (не требуется дополнительное (не предсказуемое) управление памятью.)
- улучшенная локальность памяти.
2. Минусы:
- содержит дополнительные данные для интеграции контейнеров. (каждый тип магазина должен быть адаптирован (изменен) к требованиям контейнера.)
- Предостережение с возможными побочными эффектами при изменении содержимого хранимого объекта (особенно для ассоциативных контейнеров).
- управление жизненным циклом вставленного объекта, независимо от контейнера.
- объект может быть удален до удаления из контейнера, ведущего к недействительности итератора.
- интрузивные контейнеры не копируются и не могут быть назначены.
Объект не "знает" и содержит сведения о контейнере, в котором должен храниться. Пример:
struct Node { T data; }1. Плюсы:
- не содержит дополнительной информации о интеграции контейнера.
- срок службы объекта, управляемый контейнером. (менее сложный.)
2. Минусы:
- хранить копии значений, переданных пользователем. (возможно строительство на месте.)
- объект может принадлежать только одному контейнеру. (или contaier должен хранить указатели на объекты.)
- накладные расходы при хранении копий. (бухгалтерия по каждому размещению.)
не скопируемые или не движимые объекты НЕ МОГУТ быть сохранены в неинтрузивных контейнерах.- не может хранить производный объект и сохранять прежний тип. (разрезание - теряет полиморфизм.)