Este projeto é composto por alguns problemas de codificação comuns, código experimental, scripts de configuração, algoritmos e estruturas de dados e padrões de design desenvolvidos predominantemente em C ++
Era privado mais cedo, mas decidi torná -lo público por 2 motivos:
um. As pessoas podem se beneficiar do código para problemas comuns, algoritmos e padrões de design
b. Eu posso ter um conjunto de olhos frescos e múltiplos no meu código, ajudando -me a melhorar sua qualidade
O conteúdo do diretório é explicado abaixo para uma melhor navegação. Para obter instruções de construção, consulte a próxima seção neste readme
Esta seção/diretório contém exemplos de código para 23 padrões de design concebidos por gangue de quatro em 1994
Existem 3 subseções padrão: estrutural, criativo e comportamental
Cada diretório de subseção contém um arquivo de origem para cada padrão de design nas 3 categorias mencionadas acima
Este diretório de seção (DSA_exercises) contém várias declarações de problemas da DSA e suas soluções na forma de código -fonte.
Um documento de declarações de problemas para cada categoria é colocado sob seu respectivo diretório. O arquivo de origem que contém a solução no mesmo diretório é mencionado no final de todos os problemas.
main() usada dentro da solução para o respectivo problema Este diretório de seção ExperimentalCode contém código puramente exprigeral com base em novos conceitos de C ++ que aprendi. Eu o deixei aqui, caso beneficie qualquer pessoa que também esteja aprendendo C ++ ou seja um novo programador
Especialistas em C ++ podem ignorar com segurança esta seção
Este diretório contém utilitários comuns na forma de cabeçalhos ou bibliotecas compartilhadas exigidas geralmente pela maioria das fontes deste projeto. Isso pode ajudar a reduzir a duplicação e também o tamanho binário em alguns casos, se os métodos forem definidos em uma biblioteca compartilhada em vez do código -fonte.
Este diretório contém alguns scripts e código Misc usados para configurar meu ambiente de projeto ou desenvolver para avaliar um conceito.
A razão pela qual ele acaba aqui e não na seção de código experimental é por causa de sua natureza. Por exemplo, DL_API_shell.c é um arquivo de origem que contém a API dinâmica do carregador da libdl.so biblioteca compartilhada e precisa ser compilada de maneira diferente de como outros arquivos de origem no código experimental são incorporados em cmake, como mostrado abaixo:
gcc -rdynamic -o DL_API_shell DL_API_shell.c -ldl
Os scripts do shell podem não se aplicar à sua configuração Env Project, mas, caso o faça, execute -os como raiz usando sudo
Este projeto foi criado com a ferramenta de construção do CMake em todos os níveis para seções diferentes para fornecer mais fexibilidade durante a construção.
Em segundo lugar, este projeto não possui um binário/biblioteca unificado vinculado a outros arquivos de objeto relocáveis, cada arquivo de origem sendo um aplicativo independente
Em cada nível, o CMake adiciona subdiretos para os diretórios a jusante. Por padrão, o CMake de nível superior criará todas as fontes que residem em todos os diretórios da seção. Isso pode ser uma perda de tempo se você pretende trabalhar com qualquer seção, por exemplo, DesignPatterns
Em tais cenários, comente (comentários do cmake começam com # ) as chamadas add_subdirectory() que não são necessárias. Em nosso exemplo, o cmake de nível superior ficará algo assim:
add_subdirectory(DesignPatterns)
#add_subdirectory(DSA_Exercises)
#add_subdirectory(ExperimentalCode)
Isso gerará apenas os binários de código bin DesignPatterns
Esta regra pode ser aplicada recursivamente para diretórios a jusante de maneira semelhante para economizar tempo de construção
Depois que os subdiretórios necessários forem configurados em cmake, execute Clean Reconfigure All seguida de Clean Rebuild All para construir as fontes se você abriu o projeto no vscode
Em outros casos, execute os seguintes comandos no prompt de comando no nível raiz do projeto
mkdir build
cd build
cmake ..
make
A saída para fontes envolvidas será gerada no bin do projeto do projeto sob seus respectivos diretórios de seção
Observe que o código aqui não é perfeito! Pode haver maneiras melhores e mais otimizadas de implementar algumas tarefas e essa é exatamente a intenção de expor esse repositório ao público.
Estou convidando sugestões e modificações no código em qualquer uma das seções acima.
Você pode enviar um email ([email protected]) suas sugestões/modificações ou criar uma nova filial e aumentar uma solicitação de tração contra a filial mestre
Você também pode levantar problemas no github se descobrir algum
Feliz codificação e aprendizado!