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

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ằng size() của vector.

Đặc điểm

  1. 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ử.
  2. 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ùng shrink_to_fit() để giảm dung lượng về đúng với size().
  3. capacity() cao hơn size() 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.
  4. Để 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ử để đặt capacity() về một dung lượng tối thiểu là n.
  5. 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

reserveYêu cầu thay đổi/khởi tạo (trước) dung lượng của vector
sizeTrả về số lượng phần tử hiện có trong vector
max_sizeTrả về số lượng phần tử tối đa mà vector có thể chứa
resizeThay đổi kích thước vector