Proyek ini terdiri dari beberapa masalah pengkodean umum, kode eksperimental, skrip pengaturan, algoritma dan struktur data dan pola desain yang dikembangkan terutama dalam C ++
Itu pribadi sebelumnya tetapi saya memutuskan untuk mengumumkannya karena 2 alasan:
A. Orang dapat memperoleh manfaat dari kode untuk masalah umum, algoritma, dan pola desain
B. Saya dapat memiliki mata segar dan berganda pada kode saya membantu saya meningkatkan kualitasnya
Isi direktori dijelaskan di bawah ini untuk navigasi yang lebih baik. Untuk membangun instruksi, lihat bagian selanjutnya dalam readme ini
Bagian/Direktori ini berisi contoh kode untuk 23 pola desain yang disetujui oleh Gang of Four pada tahun 1994
Ada 3 subbagian standar: struktural, kreasi dan perilaku
Setiap direktori subbagian berisi file sumber untuk setiap pola desain di bawah 3 kategori yang disebutkan di atas
Direktori bagian ini (DSA_EXERCISES) berisi berbagai pernyataan masalah DSA dan solusinya dalam bentuk kode sumber.
Dokumen pernyataan masalah untuk setiap kategori ditempatkan di bawah direktori masing -masing. File sumber yang berisi solusi di direktori yang sama disebutkan di akhir setiap masalah.
main() yang sama yang digunakan di dalam solusi untuk masalah masing -masing Kode ExperimentalCode Direktori Bagian ini berisi kode murni ekspresi berdasarkan konsep C ++ baru yang saya pelajari. Saya telah meninggalkannya di sini kalau -kalau itu menguntungkan siapa pun yang juga belajar C ++ atau seorang programmer baru
Para ahli di C ++ dapat dengan aman mengabaikan bagian ini
Direktori ini berisi utilitas umum dalam bentuk header atau perpustakaan bersama yang secara umum diperlukan oleh sebagian besar sumber dalam proyek ini. Ini dapat membantu mengurangi duplikasi dan juga ukuran biner dalam beberapa kasus jika metode didefinisikan dalam pustaka bersama alih -alih kode sumber.
Direktori ini berisi beberapa skrip misc dan kode yang digunakan untuk mengatur lingkungan proyek saya atau dikembangkan untuk mengevaluasi suatu konsep.
Alasan itu berakhir di sini dan bukan di bagian kode eksperimental adalah karena sifatnya. Misalnya, DL_API_shell.c adalah file sumber yang berisi API loader dinamis dari libdl.so perpustakaan bersama dan perlu dikompilasi secara berbeda dari bagaimana file sumber lain dalam kode eksperimental dibangun dalam cmake seperti yang ditunjukkan di bawah ini:
gcc -rdynamic -o DL_API_shell DL_API_shell.c -ldl
Skrip shell mungkin tidak berlaku untuk pengaturan proyek Anda tetapi jika mereka melakukannya, jalankan sebagai root menggunakan sudo
Proyek ini telah diatur dengan CMake Build Tool di setiap level untuk bagian yang berbeda untuk memberikan lebih banyak feksibilitas saat membangun.
Kedua, proyek ini tidak memiliki biner/perpustakaan terpadu yang ditautkan dengan file objek relocatable lainnya, setiap file sumber menjadi aplikasi mandiri
Di setiap level CMake menambahkan subdirektori untuk direktori hilir. Secara default, CMake tingkat atas akan membangun semua sumber yang berada di semua direktori bagian. Ini bisa menjadi buang -buang waktu jika Anda berniat bekerja dengan satu bagian, misalnya DesignPatterns
Dalam skenario seperti itu, komentar keluar (komentar cmake dimulai dengan # ) panggilan add_subdirectory() yang tidak diperlukan. Dalam contoh kami, CMake tingkat atas akan terlihat seperti ini:
add_subdirectory(DesignPatterns)
#add_subdirectory(DSA_Exercises)
#add_subdirectory(ExperimentalCode)
Ini hanya akan menghasilkan biner kode sumber DesignPatterns di bawah bin
Aturan ini dapat diterapkan secara rekursif untuk direktori hilir dengan cara yang sama untuk menghemat waktu pembangunan
Setelah subdirektori yang diperlukan diatur dalam cmake, jalankan Clean Reconfigure All diikuti oleh Clean Rebuild All untuk membangun sumber jika Anda telah membuka proyek di vscode
Dalam kasus lain, jalankan perintah berikut pada prompt perintah di level root proyek
mkdir build
cd build
cmake ..
make
Output untuk sumber yang terlibat akan dihasilkan di direktori bin proyek di bawah direktori bagian masing -masing
Harap dicatat bahwa kode di sini tidak sempurna! Mungkin ada cara yang lebih baik dan lebih dioptimalkan untuk mengimplementasikan beberapa tugas dan itulah niat mengekspos repo ini kepada publik.
Saya mengundang saran dan modifikasi pada kode di salah satu bagian di atas.
Anda dapat mengirim email ([email protected]) saya saran/modifikasi Anda atau membuat cabang baru dan mengajukan permintaan tarik terhadap cabang master
Anda juga dapat mengangkat masalah di GitHub jika Anda menemukan apapun
Happy Coding dan Learning!