Hai chức năng làm rất nhiều thứ khác nhau!
Các resize()
phương pháp (và qua tranh luận để xây dựng tương đương với đó) sẽ chèn hoặc xóa số thích hợp của các yếu tố để các vector để làm cho kích thước nó nhất định (nó có số thứ hai tùy chọn để xác định giá trị của họ). Nó sẽ ảnh hưởng đến size()
, việc lặp lại sẽ đi qua tất cả các yếu tố đó, Push_back sẽ chèn sau chúng và bạn có thể truy cập trực tiếp vào chúng bằng cách sử dụng operator[]
.
Các reserve()
phương pháp duy nhất phân bổ bộ nhớ, nhưng lá nó uninitialized. Nó chỉ ảnh hưởngcapacity()
, nhưng size()
sẽ không thay đổi. Không có giá trị cho các đối tượng, bởi vì không có gì được thêm vào vector. Nếu sau đó bạn chèn các phần tử, sẽ không có sự phân bổ lại, vì nó đã được thực hiện trước, nhưng đó là hiệu ứng duy nhất.
Vì vậy, nó phụ thuộc vào những gì bạn muốn. Nếu bạn muốn một mảng 1000 mục mặc định, hãy sử dụngresize()
. Nếu bạn muốn một mảng mà bạn muốn chèn 1000 mục và muốn tránh một vài phân bổ, hãy sử dụng reserve()
.
EDIT: Nhận xét của Blastfurnace khiến tôi đọc lại câu hỏi và nhận ra rằng trong trường hợp của bạn, câu trả lời đúng là không được phân loại theo cách thủ công. Chỉ cần tiếp tục chèn các yếu tố ở cuối khi bạn cần. Các vector sẽ tự động phân bổ lại khi cần thiết và sẽ làm điều đó hơn một cách hiệu quả hơn so với cách thủ công đề cập. Trường hợp duy nhất có reserve()
ý nghĩa là khi bạn có ước tính chính xác hợp lý về tổng kích thước bạn sẽ dễ dàng có sẵn trước.
EDIT2: Chỉnh sửa câu hỏi quảng cáo: Nếu bạn có ước tính ban đầu, thì reserve()
ước tính đó. Nếu nó không đủ, hãy để vector làm điều đó.
std::vector
.