Bạn có thể trao đổi các vector như những người khác đã gợi ý, và như mô tả trong http://www.gotw.ca/gotw/054.htm nhưng lưu ý rằng nó là không miễn phí, bạn đang thực hiện một bản sao của tất cả các yếu tố, bởi vì các vector phải phân bổ một mới, nhỏ hơn , đoạn bộ nhớ và sao chép tất cả nội dung cũ. (Hoạt động hoán đổi về cơ bản là miễn phí, nhưng bạn đang hoán đổi với một bản sao của dữ liệu ban đầu được tạo ra với một bản sao của dữ liệu vectơ ban đầu, là không phải là miễn phí)
Nếu bạn biết trước lớn như thế nào, bạn nên phân bổ kích thước phù hợp để bắt đầu, do đó, không cần thay đổi kích thước:
std::vector<foo> v(1000); // Create a vector with capacity for 1000 elements
Và nếu bạn không biết trước, tại sao nó lại lãng phí một chút không gian? Có đáng để thời gian sao chép mọi phần tử vào một vectơ mới và nhỏ hơn (đó là những gì std :: vectơ (v) .swap (v) sẽ làm), chỉ để tiết kiệm vài kilobyte bộ nhớ?
Tương tự, khi bạn xóa véc tơ, nếu bạn định nạp lại nó thì, đặt công suất về 0 có vẻ là một sự lãng phí thời gian ấn tượng.
Sửa:
baash05: những gì nếu bạn đã có 1000000 mục một 10 meg ram.bạn có nói số giảm số tiền trên không là quan trọng không?
Không đổi kích thước vector yêu cầu Bộ nhớ tạm thời, vì vậy nếu bạn bị hạn chế về bộ nhớ, điều đó có thể làm hỏng ứng dụng của bạn. (Bạn phải có vector ban đầu trong bộ nhớ, và tạm thời, trước khi bạn có thể trao đổi chúng, do đó bạn sẽ sử dụng tối đa gấp đôi RAM tại thời điểm đó). Sau đó, bạn có thể tiết kiệm một lượng bộ nhớ nhỏ (tối đa một vài MB), nhưng điều này không quan trọng, bởi vì dung lượng dư thừa trong véc-tơ sẽ không bao giờ được truy cập, vì vậy nó sẽ được đẩy tới tệp trang, và do đó không được tính vào giới hạn RAM của bạn ngay từ đầu.
Nếu bạn có 1000000 mục, thì bạn nên khởi tạo vectơ theo đúng kích thước ở vị trí đầu tiên.
Và nếu bạn không thể làm điều đó, thì bạn sẽ thường tốt hơn là không để lại dung lượng một mình. Đặc biệt là kể từ khi bạn nói rằng bạn sẽ nạp lại véc tơ, bạn chắc chắn nên sử dụng lại dung lượng đã được cấp phát, thay vì phân bổ, phân bổ lại, sao chép và giải phóng mọi thứ liên tục.
Bạn có hai trường hợp có thể xảy ra. Bạn biết bạn cần lưu trữ bao nhiêu phần tử hoặc bạn không cần. Nếu bạn biết, sau đó bạn có thể tạo ra vectơ với kích thước chính xác ngay từ đầu, và vì vậy bạn không bao giờ cần phải thay đổi kích cỡ nó, hoặc bạn không biết, và sau đó bạn cũng có thể giữ dung lượng dư thừa, vì vậy ít nhất nó sẽ không phải thay đổi kích thước trở lên khi bạn nạp lại véc-tơ của mình.
Hệ thống của bạn có thiếu bộ nhớ không? Dự trữ như vậy có nghĩa là thêm n mục vào nó sử dụng thời gian O (n^2) và tối đa n + 100 đối tượng có giá trị không gian cộng với lỗi làm tròn. Việc cho phép vectơ mở rộng chính nó sẽ ít mã, thời gian O (n) và trên hầu hết các triển khai sử dụng tối đa 2 * n khoảng trống cộng với làm tròn. –
Hệ thống của tôi rất ngắn trên bộ nhớ (đã nhúng) .. Mã thực sự chỉ là một ví dụ về những gì tôi đang nghĩ đến việc triển khai. Đối với hầu hết các phần tôi nhận được 1000 phần khối từ "bảng" vì vậy nó làm cho tinh thần để thay đổi kích thước trong cùng một tần số. CLEANUP là mối quan tâm chính của tôi. – baash05