std::vector::reserve
#include <vector>
void reserve (size_type n);
Yêu cầu thay đổi/khởi tạo (trước) dung lượng của vector.
Tham số
n
- Dung lượng tối thiểu cho vector.
- Dung lượng kết quả sau khi sử dụng hàm
reserve()
có thể bằng hoặc lớn hơnn
. n
là kiểu số nguyên không âm.- Khi dung lượng hiện tại nhỏ hơn
n
, hàm sẽ cấp phát lại bộ nhớ để tăng dung lượng của vector lên ít nhấtn
. - Nếu dung lượng hiện tại lớn hơn hoặc bằng
n
, không có hành động nào xảy ra. - Nếu
n
nhỏ hơn capacity hiện tại,reserve()
không làm giảm dung lượng. Để giảm dung lượng, cần dùngshrink_to_fit()
.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
reserve()
chỉ thay đổi capacity (khả năng chứa), không thay đổi size (số lượng phần tử hiện tại) của vector.- Phần tử trong vector không bị ảnh hưởng bởi hàm này.
- Khi cấp phát lại bộ nhớ, các phần tử hiện tại của vector sẽ được sao chép sang vùng nhớ mới.
- Giảm thiểu số lần cấp phát lại bộ nhớ khi vector thêm nhiều phần tử.
- Thích hợp sử dụng khi biết trước số lượng phần tử sẽ thêm vào vector.
- Gọi
reserve()
với số lượng lớn hơn cần thiết có thể gây lãng phí bộ nhớ. - Dung lượng được tăng lên, nhưng không thay đổi kích thước thực tế hoặc giá trị các phần tử.
- Khi nào nên sử dụng
reserve()
?- Khi biết trước số lượng phần tử cần thêm vào vector.
- Khi muốn tăng hiệu suất cho các thao tác chèn liên tiếp (đặc biệt với số lượng lớn).
Ví dụ
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
// Reserve bộ nhớ cho 100 phần tử
vec.reserve(100);
std::cout << "Size: " << vec.size() << "\n"; // 0
std::cout << "Capacity: " << vec.capacity() << "\n"; // 100
// Thêm phần tử
vec.push_back(1);
vec.push_back(2);
std::cout << "Size: " << vec.size() << "\n"; // 2
std::cout << "Capacity: " << vec.capacity() << "\n"; // 100
return 0;
}
Các hàm liên quan
shrink_to_fit | Yêu cầu giảm dung lượng của vector về đúng với kích thước hiện tại, giải phóng bộ nhớ không sử dụng |
capacity | Trả về dung lượng hiện tại của vector |
resize | Thay đổi kích thước vector |
max_size | Trả về số lượng phần tử tối đa mà vector có thể chứa |