std::vector::capacity
#include <vector>
size_type capacity() const noexcept;
Trả về dung lượng hiện tại của vector.
Tham số
Không có tham số
Giá trị trả về
capacity()
trả về số lượng phần tử mà vector có thể chứa trước khi cần phải cấp phát lại bộ nhớ. Dung lượng này luôn lớn hơn hoặc bằngsize()
của vector.
Đặc điểm
- Khi số phần tử trong vector vượt quá
capacity()
, vector sẽ tự động cấp phát lại bộ nhớ với dung lượng lớn hơn (thường tăng gấp đôi, nhưng không cố định). Việc này giúp hạn chế số lần cấp phát lại bộ nhớ, tăng hiệu suất khi thêm nhiều phần tử. capacity()
không thay đổi khi các phần tử bị xóa khỏi vector. Nghĩa là, vector giữ lại bộ nhớ đã được cấp phát, trừ khi dùngshrink_to_fit()
để giảm dung lượng về đúng vớisize()
.capacity()
cao hơnsize()
sẽ giúp thêm phần tử nhanh hơn, nhưng đồng thời cũng tiêu tốn bộ nhớ hơn. Điều này quan trọng trong các ứng dụng yêu cầu tối ưu về bộ nhớ hoặc hiệu suất.- Để tránh cấp phát lại nhiều lần, có thể gọi
reserve(n)
trước khi thêm nhiều phần tử để đặtcapacity()
về một dung lượng tối thiểu làn
. - Hàm
capacity()
có thời gian truy cập làO(1)
do chỉ trả về một giá trị nguyên của vector.
Ví dụ
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.reserve(10); // Đặt dung lượng tối thiểu là 10
std::cout << "Capacity: " << vec.capacity() << "\n"; // In ra 10
vec.push_back(1);
std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << "\n"; // Capacity vẫn là 10
vec.resize(15); // Thay đổi kích thước lên 15, capacity sẽ tăng
std::cout << "Size: " << vec.size() << ", Capacity: " << vec.capacity() << "\n"; // Capacity có thể là 15 hoặc lớn hơn
return 0;
}
Các hàm liên quan
reserve | Yêu cầu thay đổi/khởi tạo (trước) dung lượng của vector |
size | Trả về số lượng phần tử hiện có trong vector |
max_size | Trả về số lượng phần tử tối đa mà vector có thể chứa |
resize | Thay đổi kích thước vector |