Этот проект состоит из некоторых общих задач кодирования, экспериментального кода, сценариев настройки, алгоритмов и структур данных и дизайнерских шаблонов, разработанных преимущественно в C ++
Это было частно раньше, но я решил стать публичным по двум причинам:
а Люди могут извлечь выгоду из кода для общих проблем, алгоритмов и моделей проектирования
беременный Я могу иметь свежий и несколько глаз на мой код, помогающий мне улучшить его качество
Содержимое каталога объяснено ниже для лучшей навигации. Для инструкций по сборке см. В следующем разделе в этом Readme
Этот раздел/каталог содержит примеры кода для 23 дизайнерских шаблонов, посвященных банде из четырех в 1994 году.
Есть 3 стандартных подраздела: структурные, творческие и поведенческие
Каждый каталог подраздела содержит исходный файл для каждого шаблона проектирования в соответствии с 3 категориями, упомянутыми выше
Этот каталог раздела (DSA_EXERSISES) содержит различные задачи DSA и их решения в форме исходного кода.
Документ о задачах для каждой категории находится под их соответствующим каталогом. Исходный файл, содержащий решение в одном и том же каталоге, упоминается в конце каждой проблемы.
main() используемая в решении для соответствующей задачи Этот ExperimentalCode код каталога разделения содержит чисто экспрессионный код на основе новых концепций C ++, которые я изучил. Я оставил его здесь на случай, если это принесет пользу любому, кто также изучает C ++ или является новым программистом
Эксперты в C ++ могут безопасно игнорировать этот раздел
Этот каталог содержит общие утилиты в форме заголовков или общих библиотек, которые обычно требуются большинством источников в этом проекте. Это может помочь уменьшить дублирование, а также бинарный размер в некоторых случаях, если методы определяются в общей библиотеке вместо исходного кода.
Этот каталог содержит некоторые сценарии MISC и код, используемые для настройки моей среды проекта, или разработанный для оценки концепции.
Причина, по которой он заканчивается здесь, а не в разделе экспериментального кода, заключается в его природе. Например, DL_API_shell.c - это исходный файл, содержащий API динамического загрузчика из библиотеки общей библиотеки libdl.so и должен быть скомпилирован иначе, чем другие исходные файлы в экспериментальном коде встроены в Cmake, как показано ниже:
gcc -rdynamic -o DL_API_shell DL_API_shell.c -ldl
Сценарии оболочки могут не применяться к настройке вашего проекта, но в случае, если они это сделают, запустите их как root, используя sudo
Этот проект был создан с помощью инструмента сборки Cmake на каждом уровне для разных разделах, чтобы обеспечить большую больную частоту при строительстве.
Во -вторых, этот проект не имеет унифицированного бинарного/библиотеки, связанного с другими перемещаемыми объектными файлами, каждый исходный файл является автономным приложением
На каждом уровне Cmake добавляет подкаталоги для нисходящих каталогов. По умолчанию Cmake верхнего уровня будет создавать все источники, находящиеся во всех каталогах раздела. Это может быть пустой тратой времени, если вы собираетесь работать с каким -либо одним разделом, например, DesignPatterns
В таких сценариях комментарий (комментарии Cmake начинаются с # ) вызовы add_subdirectory() , которые не требуются. В нашем примере Cmake верхнего уровня будет выглядеть примерно так:
add_subdirectory(DesignPatterns)
#add_subdirectory(DSA_Exercises)
#add_subdirectory(ExperimentalCode)
Это будет генерировать только двоичные файлы исходного кода DesignPatterns под bin
Это правило может быть применено рекурсивно для каталогов вниз по течению аналогичным образом, чтобы сэкономить время на сборку
После того, как требуемые подкаталогов установлены в Cmake, запустите Clean Reconfigure All , за которыми следуют Clean Rebuild All чтобы построить источники, если вы открыли проект в VSCODE
В других случаях запустите следующие команды в командной строке на корневом уровне проекта
mkdir build
cd build
cmake ..
make
Вывод для вовлеченных источников будет генерироваться в каталоге bin проекта в соответствии с их соответствующими справочными каталогами
Обратите внимание, что код в настоящем документе не идеален! Могут быть лучшие и более оптимизированные способы реализации некоторых задач, и это именно намерение раскрыть это репо населению.
Я приглашаю предложения и модификации кода в любом из вышеуказанных разделов.
Вы можете либо по электронной почте ([email protected]) мне ваши предложения/модификации, либо создать новый филиал и поднять запрос на привлечение против главного филиала
Вы также можете поднять проблемы на GitHub, если обнаружите какие -либо
Счастливого кодирования и обучения!