ขอสวัสดี เพื่อน ๆ พี่ ๆ น้อง ๆ กับ Blog Entry แรก โดยผมเอง
เนื้อหาที่ผมจะเขียนส่วนใหญ่ คงจะไม่ได้สอนอะไรมากมาย แต่จะเน้นการนำไปใช้เฉพาะกิจเพื่อการเขียนโปรแกรมภาษา C/C++
ซึ่งจะสะดวกในการเขียนโปรแกรมแข่งขันมากขึ้นครับ
ผมก็ขอแทนตัวเองด้วยผมแล้วกันนะครับ หวังว่าผู้อ่านจะได้รับความรู้และเอาไปใช้ประโยชน์ได้บ้างนะครับ
หัวข้อแรกที่ผมจะเขียนเลยคือ
หรือที่ชาวบ้านอย่างเรา ๆ ติดปากว่า STL นั่นเอง
เริ่มต้นด้วยคำถามสิ้นคิด
STL คืออะไร
ผมก็ไม่รู้หรอกน่า เอาเป็นว่าพอใช้เป็นก็แล้วกัน (จะบ้าเรอะ)
เข้าเรื่องดีกว่า
STL คือ Library มาตรฐานของภาษา C++ (ภาษา C ใช้ไม่ได้นะ) ที่ใช้จัดการสร้าง แก้ไข เพิ่ม ลบ คูณ หาร โครงสร้างข้อมูลแบบพลวัต
(นั่น ยังกระแดะใช้คำว่า Dynamic เป็นภาษาไทยอีก)
ตัวอย่าง ประเภทโครงสร้างข้อมูลที่มีให้ใช้คือ
list ก็คือ linked list นั่นเอง มีทั้งแบบ singly และ doubly ให้ใช้มากมายqueue ชื่อมัน Self-explanatory นะstack ชื่อมัน Self-explanatory เหมือนกันแหละdeque Double ended queue หรือก็คือคิวแบบมีปลายสองด้านvector เป็น random access คล้าย ๆ Arrayset อันนี้ไม่แน่ใจ map คล้าย ๆ กับ set แต่ดูเหมือนจะพิเศษตรงเรื่องของ key กับ value นั่นเองhash_ ก็พวกคล้าย ๆ เดิมแต่ใช้ hash อิมพลิเมนท์แทนพูดเกริ่น ๆ แล้วก็คือว่า มันคือโครงสร้างข้อมูลง่าย ๆ ที่เรารู้จักเป็น class ไว้ให้เราใช้อยู่แล้วครับ
เขาสร้างให้เราใช้ เราก็ใช้สิครับ ไม่เห็นต้องไปเขียนใหม่เองเลย
(อย่างไรก็ดี มันก็มีข้อควรระวัง ขอให้อ่านต่อไปก่อนนะครับ)
เริ่มด้วยคำถาม “ทำไมต้องใช้ STL กันก่อนดีกว่า”
ว่ากันว่า นานมาแล้ว ในการแข่งขันรายการหนึ่ง (เหตุการณ์สมมติ)
มีเด็กชาย A นามสมมติ สามารถใช้สติปัญญาฉลาดเลิศล้ำของเขา
แก้ปัญหาโจทย์สำหรับ … แต่ปรากฏว่าเขาต้องเขียน AVL tree ด้วย
ผลปรากฏว่า เขาเสียเวลาส่วนใหญ่ไปกับการเขียนและดีบักโปรแกรม
สุดท้ายเขาก็เสียเวลาและไม่ได้คะแนนใด ๆ จากโจทย์ข้อนั้นไป
(เหมือนว่าเนื้อเรื่องมันสนุกอย่างนั้นแหละ)
ผู้อ่านคงจะเห็นความเศร้าจากการไม่ได้ใช้ STL แล้วนะครับ
เป็นเรื่องธรรมดา ถ้า STL เป็นของดีจริง แล้วทำไมไม่ใช้กันให้หมดเลยละ
เรื่องของ STL ก็มีข้อเสียของมันอยู่คือ
มันเป็น Library ที่เขียนมาให้รองรับการทำงานที่กว้าง แต่เราใช้งานเพียงนิดเดียว
แม้ว่าผู้พัฒนาจะเขียน Library มาค่อนข้าง optimize แล้ว แต่อย่าวางใจมากนักเพราะ ถ้าเราไม่เข้าใจการทำงานของมัน อาจทำให้โปรแกรมเรารันช้าโดยที่เราไม่รู้มาก่อน เช่น เวลา search ข้อมูลใน list จะใช้ O(n) เป็นต้น
ฉะนั้นคำแนะนำของผมก็คือ ควรจะเข้าใจหลักการทำงานของโครงสร้างข้อมูลพื้นฐานก่อน รวมทั้ง complexity ของแต่ละ operation ด้วย
และอาจลอง Implement โครงสร้างข้อมูลดูเองก่อน แล้วจึงหันมาใช้ STL กัน
เมื่อจะเริ่มศึกษา STL คู่มือที่ดีที่สุดคงจะเป็นของเว็บ SGI
ซึ่งมีคำอธิบายพร้ิอม แต่คงไม่เหมาะจะใช้เริ่มต้นเท่าไหร่นัก
คราวหน้าผมจะพูดถึงวิธีการใช้งาน STL อย่างเบื้องต้น พร้อมกับยกตัวอย่างการใช้งานให้เห็นภาพ
สุดท้ายมีคำพูดเกี่ยวกับ STL จะฝากทิ้งไว้คือ
มี STL เหมือนมีอาวุธอยู่ในมือ
อาวุธยิ่งใหญ่ ยิ่งหนัก ใช้ได้ผลดี แต่ตอนถือก็เหนื่อยตามไปด้วย
พบกันคราวหน้าครับ