Подтвердить что ты не робот

Интрузивные списки

Я не смог найти слишком много информации о них в Интернете. Что они и когда они обычно используются?

Спасибо.

4b9b3361

Ответ 1

Интрузивный список - это тот, где указатель на следующий список node хранится в той же структуре, что и данные node. Обычно это "Плохая вещь", поскольку она связывает данные с конкретной реализацией списка. Большинство библиотек классов (например, стандартная библиотека С++) используют неинтрузивные списки, где данные ничего не знают о реализации списка (или другого контейнера).

Ответ 2

Мне действительно нравится интрузивная модель

  • Лучше по памяти (не так много небольших ассигнований для вещей указать на другие вещи)
  • Это позволяет вам иметь объект, который существуют в нескольких контейнерах.
  • Он позволяет вам найти элемент с одним режимом поиска (хэш), но затем найдите следующий элемент в лексикографическом порядке (это не то же, что и # 2, но это может быть также выполнено boost multi_index_container, но обратите внимание, что у multi_index_container есть определенные недостатки, которые не являются проблемами с интрузивным)

Интрузивный ХОРОШИЙ
Вам просто нужно знать, что вы делаете (что верно для любого контейнера)

Ответ 3

Списки интрузий - это списки, в которых сами объекты являются головками или ячейками списков. Это хорошие или плохие вещи в зависимости от контекста.

Внутри некоторого определенного модуля (небезопасная группа классов, работающих вместе) это может быть ЛУЧШЕЕ среднее для установления связей между классами. Они разрешают беззатратное прямое и полное управление общими отношениями, такими как unicity (например: яблоки не повторяют два раза в яблочных словах, и для этого не нужен какой-либо ключ, а яблоки не принадлежат к двум отдельным деревьям), они являются судоходными в обоих направлениях (прямые access к appletree с учетом яблока и яблок с некоторыми яблоко). Все основные операции: O (1) (нет поиска в каком-либо внешнем контейнере).

Интрузивный список ОЧЕНЬ ПЛОХО между двумя модулями. Поскольку они будут связаны друг с другом, а обоснование модулей - это управление независимостью кода.

Ответ 4

Ниже приведено краткое описание, которое также подходит для списков:

I. Интрузивные контейнеры.

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

struct Node
{
    Node* next;   // additional
    Node* prev;   // information 
    T data;
} 
        

1. Плюсы:

        
  •         
  • хранит сами объекты.
            
  • не требует управления памятью.
            
  • Итерация выполняется быстрее.        
  • лучшие гарантии исключений.        
  • предсказуемость при вставке и удалении объектов. (не требуется дополнительное (не предсказуемое) управление памятью.)        
  • улучшенная локальность памяти.        
        

2. Минусы:

         
  •             
  • содержит дополнительные данные для интеграции контейнеров.               (каждый тип магазина должен быть адаптирован (изменен) к требованиям контейнера.)            
  • Предостережение с возможными побочными эффектами при изменении содержимого хранимого объекта (особенно для ассоциативных контейнеров).            
  • управление жизненным циклом вставленного объекта, независимо от контейнера.            
  • объект может быть удален до удаления из контейнера, ведущего к недействительности итератора.            
  • интрузивные контейнеры не копируются и не могут быть назначены.            

II. Неинструзионные контейнеры (стандартные контейнеры С++)

Объект не "знает" и содержит сведения о контейнере, в котором должен храниться. Пример:

struct Node
{
    T data;
}
   

1. Плюсы:

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

2. Минусы:

            
  •             
  • хранить копии значений, переданных пользователем. (возможно строительство на месте.)            
  • объект может принадлежать только одному контейнеру. (или contaier должен хранить указатели на объекты.)            
  • накладные расходы при хранении копий. (бухгалтерия по каждому размещению.)            
  • не скопируемые или не движимые объекты НЕ МОГУТ быть сохранены в неинтрузивных контейнерах.            
  • не может хранить производный объект и сохранять прежний тип. (разрезание - теряет полиморфизм.)