Nếu nó đã cấp phát một khối bộ nhớ, nó sẽ tiếp tục sử dụng nó vì nó sẽ không hiệu quả để giải phóng bộ nhớ và sau đó tìm nó phải cấp thêm bộ nhớ.
Tôi luôn khuyên bạn nên viết đoạn mã thử nghiệm để kiểm tra những thứ này.
Ví dụ, tôi đã ném này lại với nhau trong vòng 2 phút để xác minh rằng tôi đã nói cho bạn thông tin chính xác:
#include <iostream>
#include <vector>
void printInfo(std::vector<char> &_vector)
{
std::cout << "Size: " << _vector.size() << std::endl;
std::cout << "Capacity: " << _vector.capacity() << std::endl;
std::cout << std::endl;
}
int main()
{
int numbElems = 10;
std::vector<char> myvector;
std::cout << "Nothing entered" << std::endl;
printInfo(myvector);
for (int i = 0; i < 10; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.push_back(i);
}
std::cout << "Pushed " << numbElems << std::endl;
printInfo(myvector);
}
for (int i = 0; i < 5; i++) {
for (int c = 0; c < numbElems; c++) {
myvector.pop_back();
}
std::cout << "Popped " << numbElems << std::endl;
printInfo(myvector);
}
myvector.erase(myvector.begin(), myvector.end());
printInfo(myvector);
std::cout << "max_size: " << myvector.max_size() << std::endl;
return 0;
}
Nếu bạn biên dịch và chạy, bạn sẽ thấy Dung không bao giờ đi xuống trong kích thước. Ngay cả sau khi xóa, hoặc một số yếu tố được loại bỏ.
Trên linux, bạn có thể sử dụng less
để cuộn qua đầu ra.
Nguồn
2014-11-12 05:38:34
Sử dụng 'shrink_to_fit' nếu bạn cần" đảm bảo "điều này (lưu ý rằng * có thể * bị bỏ qua về mặt kỹ thuật, nhưng tôi không nghĩ gì cả). – chris
Câu trả lời ngắn gọn là không - 'erase() 'không giảm' dung lượng() '. –
Và cả hai không rõ ràng() '. – bialpio