Контейнерный класс / Библиотека для [закрытого] C

Короткий ответ: вы наследуете интерфейс ICloneable, а затем реализуете функцию .clone. Clone должен делать копию по порядку и выполнять глубокую копию на любом члене, который ее требует, а затем возвращать результирующий объект. Это рекурсивная операция (требуется, чтобы все члены класса, к которому вы хотите клонировать, являются либо типами значений, либо реализуют ICloneable и что их члены являются либо типами значений, либо реализуют ICloneable и т. Д.).

Для более подробное объяснение о клонировании с использованием ICloneable, проверьте в этой статье .

Ответ long «это зависит». Как упоминалось другими, ICloneable не поддерживается дженериками, требует специальных соображений для ссылок на круговые классы и на самом деле рассматривается некоторыми как «ошибка» в .NET Framework. Метод сериализации зависит от ваших сериализуемых объектов, которых они могут не быть, и вы не можете контролировать. В обществе по-прежнему много дискуссий, которые являются «лучшей» практикой. На самом деле, ни одно из решений не является одним из самых подходящих для всех ситуаций, таких как ICloneable, изначально было истолковано.

См. Статью Developer's Corner для нескольких больше вариантов (кредит для Ян).

76
задан Jonathan Leffler 24 May 2009 в 02:40
поделиться

5 ответов

Я просто столкнулся с SGLIB при поиске реализации C контейнера карты/словаря. К сожалению, никакая карта, но это, кажется, включает контейнеры, о которых Вы спросили. Я понятия не имею, насколько хороший это.

http://sglib.sourceforge.net .

23
ответ дан Nick Van Brunt 24 November 2019 в 11:44
поделиться

у Chuck Falconer есть достойная библиотека хеша, записанная в C, который включает интерфейс C++, нажмите на hashlib.zip на веб-странице для загрузки.

у Ben Pfaff есть очень хороший и чрезвычайно хорошо зарегистрированный двоичный файл и библиотека сбалансированного дерева, GNU libavl, который реализует большинство главных древовидных структур включая деревья двоичного поиска, деревья AVL, красно-черные деревья и распараллелил версии каждого.

libavl лицензируется под LGPL (с версии 2.0.3), hashlib является GPL.

я не уверен, что Вы ищете, насколько массивы и связанные списки идут, поскольку первый поддерживается непосредственно языком, и последний достаточно вообще тривиален для реализации, не гарантируя библиотеку.

10
ответ дан Robert Gamble 24 November 2019 в 11:44
поделиться

Я пользовался библиотекой, я выращивал от Hanson "C Интерфейс и Реализации" книга. Его источник загружаем по телефону

cii книжный веб-сайт

, Все - Абстрактный тип данных. Существует Список, Набор, Таблица (карта).

5
ответ дан Jonathan Leffler 24 November 2019 в 11:44
поделиться

Sglib - отличная библиотека общих структур данных. В настоящее время библиотека предоставляет общую реализацию для:

  • сортировки массивов
  • связанных списков
  • сортированных связанных списков
  • двойных связанных списков
  • красно-черных деревьев
  • хешированных контейнеров

Это очень быстро. Быстрее эта бойкая. Он вдохновлен стандартной библиотекой шаблонов. Загрузите здесь

Еще одно решение - Привлекательная программа Chaos . Библиотека макросов C:
kbtree.h: эффективная библиотека B-дерева на C.
khash.h: быстрая и легкая библиотека хеш-таблиц на C.
kvec.h: простой векторный контейнер на C.

Кулеш Шанмугасундарам представляет общий связанный список ядра Linux и общую хеш-таблицу, основанную на связанном списке ядра Linux.

Связь Sglib и программного обеспечения «Привлекательный Хаос» и ядра Linux Список - это библиотеки макросов C. Использование void * для реализации универсальных контейнеров на C может быть неэффективным. Макросы C имитируют шаблоны C ++ и столь же эффективны, как и шаблоны C ++.

10
ответ дан 24 November 2019 в 11:44
поделиться

Короче говоря, у вас нет объекта как $ this во втором случае, поскольку статический метод - это функция / метод класса, а не экземпляр объекта.

односвязные хвостовые очереди, списки и хвостовые очереди.

Я нашел общий кеш для хранения произвольных объектов в памяти от DJ Bernstein ( http://cr.yp.to/djbdns.html ) для быть одновременно чистым, простым и очень быстрым. Найдите cache.h и cache.c в архиве djdns.

2
ответ дан 24 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: