โครงการนี้ประกอบด้วยปัญหาการเข้ารหัสทั่วไปรหัสทดลองสคริปต์การตั้งค่าอัลกอริทึมและโครงสร้างข้อมูลและรูปแบบการออกแบบที่พัฒนาขึ้นส่วนใหญ่ใน C ++
มันเป็นส่วนตัวก่อนหน้านี้ แต่ฉันตัดสินใจที่จะเปิดเผยต่อสาธารณะด้วยเหตุผล 2 ประการ:
. ผู้คนสามารถได้รับประโยชน์จากรหัสสำหรับปัญหาทั่วไปอัลกอริทึมและรูปแบบการออกแบบ
ข. ฉันสามารถมีสายตาที่สดใหม่และมีหลายชุดบนรหัสของฉันเพื่อช่วยให้ฉันปรับปรุงคุณภาพของมัน
เนื้อหาไดเรกทอรีมีการอธิบายด้านล่างเพื่อการนำทางที่ดีขึ้น สำหรับคำแนะนำในการสร้างโปรดดูส่วนถัดไปใน readme นี้
ส่วนนี้/ไดเรกทอรีนี้มีตัวอย่างรหัสสำหรับ 23 รูปแบบการออกแบบที่ได้รับการยอมรับจาก แก๊งค์ของสี่ ในปี 1994
มี 3 ส่วนย่อยมาตรฐาน: โครงสร้างการสร้างสรรค์และพฤติกรรม
ไดเรกทอรีส่วนย่อยแต่ละรายการมีไฟล์ต้นฉบับสำหรับแต่ละรูปแบบการออกแบบภายใต้ 3 หมวดหมู่ที่กล่าวถึงข้างต้น
ไดเรกทอรีส่วนนี้ (DSA_Exercises) มีคำสั่งปัญหา DSA ต่างๆและการแก้ปัญหาในรูปแบบของซอร์สโค้ด
เอกสารคำสั่งปัญหาสำหรับแต่ละหมวดหมู่อยู่ภายใต้ไดเรกทอรีที่เกี่ยวข้อง ไฟล์ต้นฉบับที่มีโซลูชันในไดเรกทอรีเดียวกันถูกกล่าวถึงในตอนท้ายของทุกปัญหา
main() ที่ใช้ในการแก้ปัญหาสำหรับปัญหาที่เกี่ยวข้อง ส่วนนี้ไดเรกทอรี ExperimentalCode มีรหัส exprimental ล้วนๆตามแนวคิด C ++ ใหม่ที่ฉันเรียนรู้ ฉันทิ้งไว้ที่นี่ในกรณีที่เป็นประโยชน์ต่อทุกคนที่เรียนรู้ C ++ หรือเป็นโปรแกรมเมอร์ใหม่
ผู้เชี่ยวชาญใน C ++ สามารถเพิกเฉยต่อส่วนนี้ได้อย่างปลอดภัย
ไดเรกทอรีนี้มียูทิลิตี้ทั่วไปในรูปแบบของส่วนหัวหรือห้องสมุดที่ใช้ร่วมกันซึ่งจำเป็นโดยทั่วไปโดยแหล่งข้อมูลส่วนใหญ่ในโครงการนี้ สิ่งนี้สามารถช่วยลดการทำซ้ำและขนาดไบนารีในบางกรณีหากมีการกำหนดวิธีการในไลบรารีที่ใช้ร่วมกันแทนซอร์สโค้ด
ไดเรกทอรีนี้มีสคริปต์และรหัสที่ใช้ในการตั้งค่าสภาพแวดล้อมโครงการของฉันหรือพัฒนาเพื่อประเมินแนวคิด
เหตุผลที่มันจบลงที่นี่และไม่ได้อยู่ในส่วนรหัสทดลองเป็นเพราะลักษณะของมัน ตัวอย่างเช่น DL_API_shell.c เป็นไฟล์ต้นฉบับที่มีไดนามิก API จาก libdl.so ที่ใช้ร่วมกันและจำเป็นต้องรวบรวมแตกต่างจากวิธีการที่ไฟล์ต้นฉบับอื่น ๆ ในรหัสทดลองถูกสร้างขึ้นใน CMake ดังที่แสดงด้านล่าง:
gcc -rdynamic -o DL_API_shell DL_API_shell.c -ldl
สคริปต์เชลล์อาจไม่สามารถใช้กับการตั้งค่าโครงการของคุณได้ แต่ในกรณีที่พวกเขาทำให้เรียกใช้เป็นรูทโดยใช้ sudo
โครงการนี้ได้รับการตั้งค่าด้วยเครื่องมือ CMake Build ในทุกระดับสำหรับส่วนต่าง ๆ เพื่อให้ Fexiveing มากขึ้นในขณะที่สร้าง
ประการที่สองโครงการนี้ไม่มีไบนารี/ไลบรารีแบบครบวงจรที่เชื่อมโยงกับไฟล์วัตถุที่สามารถเรียกเก็บข้อมูลได้อื่น ๆ ไฟล์ต้นฉบับเป็นแอปสแตนด์อโลน
ในแต่ละระดับ CMake จะเพิ่มไดเรกทอรีย่อยสำหรับไดเรกทอรีดาวน์สตรีม โดยค่าเริ่มต้น CMake ระดับบนสุดจะสร้างแหล่งที่อยู่ทั้งหมดที่อยู่ในไดเรกทอรีส่วนทั้งหมด นี่อาจเป็นการเสียเวลาถ้าคุณตั้งใจจะทำงานกับส่วนใดส่วนหนึ่งเช่น DesignPatterns
ในสถานการณ์ดังกล่าวแสดงความคิดเห็น (ความคิดเห็น cmake เริ่มต้นด้วย # ) การโทร add_subdirectory() ที่ไม่จำเป็น ในตัวอย่างของเรา cmake ระดับบนจะมีลักษณะเช่นนี้:
add_subdirectory(DesignPatterns)
#add_subdirectory(DSA_Exercises)
#add_subdirectory(ExperimentalCode)
สิ่งนี้จะสร้างเฉพาะ Binaries Source DesignPatterns ภายใต้ bin
กฎนี้สามารถนำไปใช้ซ้ำได้สำหรับไดเรกทอรีดาวน์สตรีมในลักษณะเดียวกันเพื่อประหยัดเวลาในการสร้าง
เมื่อมีการตั้งค่าไดเรกทอรีย่อยใน CMake ให้เรียกใช้ Clean Reconfigure All ตามด้วย Clean Rebuild All เพื่อสร้างแหล่งที่มาหากคุณเปิดโครงการใน VSCODE
ในกรณีอื่น ๆ เรียกใช้คำสั่งต่อไปนี้บนพรอมต์คำสั่งที่ระดับรูทของโครงการ
mkdir build
cd build
cmake ..
make
ผลลัพธ์สำหรับแหล่งข้อมูลที่เกี่ยวข้องจะถูกสร้างขึ้นในไดเรกทอรี bin ของโครงการภายใต้ไดเรกทอรีส่วนที่เกี่ยวข้อง
โปรดทราบว่ารหัสในที่นี้ไม่สมบูรณ์แบบ! อาจมีวิธีที่ดีกว่าและได้รับการปรับปรุงให้เหมาะสมยิ่งขึ้นในการใช้งานบางอย่างและนั่นคือความตั้งใจที่จะเปิดเผย repo นี้ต่อสาธารณะ
ฉันขอเชิญชวนข้อเสนอแนะและการแก้ไขรหัสในส่วนใด ๆ ข้างต้น
คุณสามารถส่งอีเมล ([email protected]) ฉันขอแนะนำ/แก้ไขหรือสร้างสาขาใหม่และยกคำขอดึงกับสาขาหลัก
นอกจากนี้คุณยังสามารถยกประเด็นเกี่ยวกับ GitHub ได้หากคุณค้นพบ
การเขียนโค้ดและการเรียนรู้อย่างมีความสุข!