std::vector
là một cách tốt để lưu trữ "động" (như bạn gọi chúng) những thứ như vật phẩm, nhưng lợi ích thực sự của vectơ không phải là thứ bạn đang lưu trữ có thể thay đổi, mà là số lượng vật phẩm trong vectơ có thể thay đổi mà không cần tối thiểu nỗ lực từ phía bạn. Để minh họa, bạn đã lưu trữ các Item
đối tượng của mình dưới dạng một mảng, bạn phải sửa kích thước của mảng tại thời gian biên dịch ( Item items[SIZE];
), có nghĩa là bạn có giới hạn trên cố định đối với các mục (trong số các vấn đề khác, điều này không xảy ra ' t có liên quan đến chủ đề cụ thể này và vì vậy tôi sẽ bỏ qua chúng).
Bạn cũng có thể tự động phân bổ mảng trong thời gian chạy ( Item * items = new Item[SIZE];
) sẽ cho phép bạn thay đổi kích thước mảng sau bằng cách phân bổ bộ nhớ mới, sao chép các mục qua và xóa bộ nhớ cũ. Điều này, tuy nhiên, là rất nhiều công việc để bạn làm.
May mắn thay, đó là những gì std::vector
làm cho bạn - về cơ bản, đó là một triển khai mảng có kích thước động, và xử lý việc quản lý bộ nhớ để phát triển mảng vượt quá khả năng hiện tại của nó đối với bạn. Đây chắc chắn là tùy chọn mà tôi khuyên bạn nên theo đuổi ngay bây giờ - nhưng lưu ý rằng bạn vẫn muốn tạo một Item
lớp.
Nó rất dễ sử dụng:
// 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();
Tài liệu MSDN cho vector
lớp có lẽ đáng để đọc và nếu bạn không quen thuộc với các mẫu - đó là những gì vector
sử dụng để cho phép nó lưu trữ "bất cứ thứ gì" - bạn cũng nên tìm hiểu những điều cơ bản ở đó. Điều này cũng dẫn tôi đến một điểm cuối cùng: mặc dù có vẻ như một vectơ có thể lưu trữ bất cứ thứ gì, nhưng nó có những ràng buộc cho những gì được cho phép trong đó và đôi khi những người mới bắt đầu ném. Cụ thể, loại bạn lưu trữ trong một vectơ phải có thể sao chép được, vì vectơ sẽ cần tạo một bản sao của các đối tượng khi thay đổi kích thước bộ nhớ trong của nó, ví dụ. Quy tắc ba của C ++ là điều cần lưu ý ở đây.