1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Eplankton-nut-struct

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 5.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 08:22 f89f586
коэффициент err% сложность
8.7240808e-10 0,5% O(n log n)
2.3154920e-08 3,7% O(n)
2.3205422e-16 19,7% O(n^2)
2.3189789e-24 22,0% O(n^3)
2.9615327e-02 206,7% O(log n)
3.1739317e-01 239,2% O(1)
===============================================================================

Установка

  1. git clone https://gitee.com/Eplankton/nut-struct.git в коде необходимо ссылаться на include/

Принцип реализации

  1. Упаковка данных
    Если необходимо, то данные узла являются базовым элементом хранения данных, это минимальная единица, такая как узел связанного списка, который содержит значение данных, передний и задний указатели и конструктор. Для типов, подобных узлам, не требуется предоставлять нетривиальные деструкторы, потому что в классе узлов нет поведения выделения динамической памяти, поэтому естественно не требуется никакого освобождения поведения, если используется собственный деструктор, также не нужно добавлять ключевое слово delete, фактически жизненный цикл переменной data и жизненный цикл экземпляра объекта одинаковы.

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

  3. Менеджер
    Менеджер создаётся пользователем и отвечает за прямое управление данными, такими как объект list, который хранит указатели на головной и хвостовой узлы связанного списка и значение длины, которое хранит длину связанного списка. Класс управления предоставляет интерфейс для внешнего управления элементами данных. Алгоритмы общего назначения и итераторы должны быть разработаны только на основе интерфейса класса управления, независимо от типа хранимых данных.

При объявлении менеджера его можно сразу привязать к созданному промежуточному объекту или просто объявить без привязки. Некоторые конструкторы позволяют создавать наборы данных узлов (создавать промежуточные объекты) на основе указанных количеств и начальных значений и привязывать их к определённому менеджеру.

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

Менеджер может отказаться от владения промежуточным объектом до завершения своей области действия и передать право собственности другому менеджеру с помощью move(). Также несколько менеджеров могут совместно владеть правом собственности (объявленным как ссылка), и эти менеджеры будут уничтожены только один раз.

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

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Eplankton-nut-struct.git
git@api.gitlife.ru:oschina-mirror/Eplankton-nut-struct.git
oschina-mirror
Eplankton-nut-struct
Eplankton-nut-struct
master