Chuyển tới nội dung chính

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ơn n.
  • 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ất n.
  • 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ùng shrink_to_fit().

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. 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.
  2. Phần tử trong vector không bị ảnh hưởng bởi hàm này.
  3. 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.
  4. Giảm thiểu số lần cấp phát lại bộ nhớ khi vector thêm nhiều phần tử.
  5. Thích hợp sử dụng khi biết trước số lượng phần tử sẽ thêm vào vector.
  6. 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ớ.
  7. 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ử.
  8. 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_fitYê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
capacityTrả về dung lượng hiện tại của vector
resizeThay đổi kích thước vector
max_sizeTrả về số lượng phần tử tối đa mà vector có thể chứa