Saya mengikuti bersama dengan buku dari GameInstitute sekarang, dan itu meminta saya untuk:
Biarkan pemain membeli dan membawa ramuan penyembuh dan ramuan bola api. Anda bisa menambahkan array Item (setelah Anda menentukan kelas item) ke kelas Player untuk menyimpannya, atau menggunakan std :: vector untuk menyimpannya.
Saya pikir saya ingin menggunakan std::vector
implementasinya, karena itu agak membingungkan saya daripada membuat kelas item, tetapi saya tidak yakin bagaimana melakukannya. Saya telah mendengar dari banyak orang bahwa vektor adalah cara terbaik untuk menyimpan nilai dinamis (seperti barang, senjata, dll), tetapi saya belum melihatnya menggunakannya.
c++
text-based
Vladimir Marenus
sumber
sumber
Jawaban:
std::vector
adalah cara yang baik untuk menyimpan "dinamis" (seperti Anda menyebutnya) hal-hal seperti barang, tetapi manfaat sebenarnya dari vektor bukanlah bahwa hal yang Anda simpan dapat berubah, tetapi bahwa jumlah item dalam vektor dapat berubah tanpa minimal usaha Anda. Untuk mengilustrasikan, jika Anda harus menyimpanItem
objek Anda sebagai array, Anda harus memperbaiki ukuran array pada waktu kompilasi (Item items[SIZE];
), yang berarti Anda memiliki batas atas tetap pada item (antara masalah lain, yang tidak t relevan dengan subjek khusus ini dan saya akan mengabaikannya).Anda juga dapat secara dinamis mengalokasikan array saat runtime (
Item * items = new Item[SIZE];
) yang akan memungkinkan Anda mengubah ukuran array nanti dengan mengalokasikan penyimpanan baru, menyalin item, dan menghapus penyimpanan yang lama. Namun, ini lebih banyak pekerjaan yang harus Anda lakukan.Untungnya, itulah yang
std::vector
Anda lakukan - ini adalah implementasi array berukuran dinamis, pada dasarnya, dan menangani manajemen memori untuk menumbuhkan array di luar kapasitas saat ini untuk Anda. Ini jelas merupakan opsi yang saya sarankan untuk Anda kejar sekarang - tetapi perhatikan bahwa Anda masih ingin membuatItem
kelas.Ini sangat mudah digunakan:
Dokumentasi MSDN untuk
vector
kelas mungkin layak dibaca, dan jika Anda tidak terbiasa dengan templat - yangvector
digunakan untuk memungkinkannya menyimpan "apa pun" - Anda harus membaca dasar-dasar di sana juga. Yang juga menuntun saya ke titik akhir: meskipun terlihat seperti vektor dapat menyimpan apa pun, ia memang memiliki kendala untuk apa yang diizinkan di dalamnya dan ini terkadang melempar pemula. Secara khusus, jenis yang Anda simpan dalam vektor harus dapat disalin, karena vektor tersebut perlu membuat salinan objek ketika mengubah ukuran penyimpanan internal, misalnya. Aturan C ++ dari tiga adalah sesuatu yang perlu diingat di sini.sumber