коэффициент | 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) |
=============================================================================== |
git clone https://gitee.com/Eplankton/nut-struct.git
в коде необходимо ссылаться на include/Упаковка данных
Если необходимо, то данные узла являются базовым элементом хранения данных, это минимальная единица, такая как узел связанного списка, который содержит значение данных, передний и задний указатели и конструктор. Для типов, подобных узлам, не требуется предоставлять нетривиальные деструкторы, потому что в классе узлов нет поведения выделения динамической памяти, поэтому естественно не требуется никакого освобождения поведения, если используется собственный деструктор, также не нужно добавлять ключевое слово delete, фактически жизненный цикл переменной data и жизненный цикл экземпляра объекта одинаковы.
Промежуточный объект
Промежуточный объект — это абстрактное понятие, оно существует только в текстовом описании, на самом деле код не допускает существования изолированных промежуточных объектов, промежуточный объект представляет собой неупорядоченное или упорядоченное множество данных, такое множество существует в куче, если нет никакого менеджера для управления им, это может привести к утечке памяти или двойному освобождению. В любом случае, непустой промежуточный объект должен иметь хотя бы одного менеджера, связанного с ним.
Менеджер
Менеджер создаётся пользователем и отвечает за прямое управление данными, такими как объект list, который хранит указатели на головной и хвостовой узлы связанного списка и значение длины, которое хранит длину связанного списка. Класс управления предоставляет интерфейс для внешнего управления элементами данных. Алгоритмы общего назначения и итераторы должны быть разработаны только на основе интерфейса класса управления, независимо от типа хранимых данных.
При объявлении менеджера его можно сразу привязать к созданному промежуточному объекту или просто объявить без привязки. Некоторые конструкторы позволяют создавать наборы данных узлов (создавать промежуточные объекты) на основе указанных количеств и начальных значений и привязывать их к определённому менеджеру.
Когда область действия менеджера заканчивается, система автоматически вызывает деструктор как минимум дважды: один отвечает за уничтожение элементов данных, другой — за уничтожение самого менеджера. Уничтожает промежуточный объект менеджера в куче и сам менеджер в стеке, освобождая память. Однако, если пользователь уже вручную уничтожил все данные с помощью функции destroy() или аналогичной функции, система будет отвечать только за уничтожение класса управления.
Менеджер может отказаться от владения промежуточным объектом до завершения своей области действия и передать право собственности другому менеджеру с помощью move(). Также несколько менеджеров могут совместно владеть правом собственности (объявленным как ссылка), и эти менеджеры будут уничтожены только один раз.
Менеджер может использовать конструктор копирования для глубокого копирования данных, создавая полностью независимый новый промежуточный объект и связывая его с собой.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )