std::vector
เป็นวิธีที่ดีในการจัดเก็บ "ไดนามิก" (ตามที่คุณเรียกว่า) สิ่งต่าง ๆ เช่นรายการ แต่ประโยชน์ที่แท้จริงของเวกเตอร์ไม่ใช่สิ่งที่คุณจัดเก็บสามารถเปลี่ยนแปลงได้ แต่จำนวนรายการในเวกเตอร์สามารถเปลี่ยนแปลงได้โดยไม่น้อยที่สุด ในส่วนของคุณ เพื่อแสดงให้เห็นว่าคุณต้องจัดเก็บItem
วัตถุของคุณเป็นอาร์เรย์คุณจะต้องแก้ไขขนาดของอาร์เรย์ในเวลารวบรวม ( Item items[SIZE];
) ซึ่งหมายความว่าคุณมีขีด จำกัด สูงสุดคงที่ในรายการ (ในประเด็นอื่น ๆ ซึ่งไม่ได้เกิดขึ้น ' ไม่เกี่ยวข้องกับเรื่องเฉพาะนี้และฉันจะข้ามไป)
นอกจากนี้คุณยังสามารถจัดสรรอาเรย์แบบไดนามิกในขณะที่ ( Item * items = new Item[SIZE];
) ซึ่งจะช่วยให้คุณปรับขนาดอาเรย์ในภายหลังโดยการจัดสรรพื้นที่เก็บข้อมูลใหม่คัดลอกรายการไปและลบที่เก็บเก่า อย่างไรก็ตามนี่เป็นงานอีกมากที่คุณต้องทำ
โชคดีที่มันมีประโยชน์อะไรstd::vector
กับคุณ - มันเป็นการใช้งานอาเรย์แบบไดนามิกขนาดเป็นหลักและจัดการการจัดการหน่วยความจำสำหรับการพัฒนาอาเรย์เกินความจุปัจจุบันของคุณ เป็นตัวเลือกที่ฉันขอแนะนำให้คุณติดตามในตอนนี้ แต่โปรดทราบว่าคุณยังต้องการสร้างItem
ชั้นเรียน
มันใช้งานง่ายมาก:
// Create an item list and two item objects to add to it.
std::vector<Item> items;
Item fireballPotion("Potion of Fireball");
Item healingPotion("Potion of Healing");
// Add the items:
items.push_back(fireballPotion);
items.push_back(healingPotion);
// operator[] is supported for accessing items.
// This will print "Potion of Fireball" for example:
std::cout << items[0].GetName();
เอกสาร MSDN สำหรับvector
ชั้นเรียนนั้นน่าจะคุ้มค่าต่อการอ่านและหากคุณไม่คุ้นเคยกับแม่แบบซึ่งเป็นสิ่งที่vector
ใช้เพื่อให้สามารถเก็บ "อะไรก็ได้" คุณควรปัดเศษข้อมูลพื้นฐานที่นั่นด้วย ซึ่งทำให้ฉันถึงจุดสุดท้าย: ในขณะที่มันดูเหมือนว่าเวกเตอร์สามารถเก็บอะไรก็ได้ แต่ก็มีข้อ จำกัด สำหรับสิ่งที่ได้รับอนุญาตและบางครั้งสิ่งเหล่านี้จะโยนผู้เริ่มต้น โดยเฉพาะอย่างยิ่งประเภทที่คุณจัดเก็บในเวกเตอร์จะต้องคัดลอกได้เนื่องจากเวกเตอร์จะต้องทำสำเนาของวัตถุเมื่อปรับขนาดที่เก็บข้อมูลภายในตัวอย่างเช่น กฎสามข้อของ C ++ นั้นเป็นสิ่งที่ควรคำนึงถึงที่นี่