Khi tôi gọi std::vector::reserve
khi nhận diện là loại std::vector<Foo*>
reserve(...)
không làm gì:C++: std :: vector :: dự trữ chưa đặt trước khi có chứa con trỏ
std::vector<int*> bar;
bar.reserve(20);
//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
//Do Stuff to all items!
}
Các nói trên for
vòng lặp chạy chính xác bằng không lần và quầy bar. size() trả về số không. Tôi không nhớ nếu điều này cũng đúng cho tất cả các container STL khác, nhưng nếu có, bao gồm hành vi cho std :: vector: TẠI SAO?
Ngoài những thứ bên dưới, tôi nghĩ bạn cũng muốn sử dụng 'std :: vector :: size_type' thay vì chỉ' std :: size_t'. Tôi không chắc nó quan trọng đến mức nào, nhưng tôi đã thấy điều này được nhắc đến như là một loại "thực hành tốt nhất" cho STL. Bạn cũng có thể khởi tạo một vectơ với tham số kích thước. Tôi nghĩ rằng 'std :: vector bar (20);' ví dụ nên phân bổ không gian cho 20 con trỏ nguyên cho mảng đó. –
ely
Mã giả mạo như 'for (std :: vector :: size_type i; i
user763305