std::string::capacity
#include <string>
size_type capacity() const noexcept;
Trả về dung lượng bộ nhớ hiện tại được cấp phát cho chuỗi. Nói cách khác, nó cho biết số lượng ký tự tối đa mà chuỗi có thể chứa mà không cần phải cấp phát lại bộ nhớ.
Tham số
Không có tham số
Giá trị trả về
size_type
- Một kiểu số nguyên không dấu (thường là std::size_t) đại diện cho dung lượng hiện tại của chuỗi (số lượng ký tự mà chuỗi có thể chứa mà không cần cấp phát lại).
Đặc điểm
capacity()
luôn lớn hơn hoặc bằngsize()
.- Giá trị cụ thể của
capacity()
sau khi khởi tạo hoặc sau các thao tác thay đổi kích thước chuỗi là không xác định (implementation-defined) và có thể khác nhau giữa các trình biên dịch và thư viện chuẩn. - Khi
size()
vượt quácapacity()
, std::string sẽ tự động cấp phát lại bộ nhớ (thường là tăng gấp đôicapacity()
), dẫn đến việc sao chép các ký tự sang vùng nhớ mới. Quá trình này có thể tốn kém về mặt hiệu năng. - Bạn có thể sử dụng
reserve()
để yêu cầu std::string cấp phát trước một lượng bộ nhớ nhất định, giúp tránh việc cấp phát lại nhiều lần khi thêm ký tự vào chuỗi. shrink_to_fit()
(từ C++11) có thể được sử dụng để yêu cầu std::string giảmcapacity()
cho khớp vớisize()
, nhưng yêu cầu này không được đảm bảo thực hiện.capacity()
không thay đổi nội dung hoặc kích thước (size) của chuỗi. Nó chỉ trả về thông tin về dung lượng hiện tại.- Hàm
capacity()
được chỉ định lànoexcept
(từ C++11), nghĩa là nó được đảm bảo không ném ra ngoại lệ. capacity()
thường được sử dụng để:- Kiểm tra xem chuỗi có cần phải cấp phát lại bộ nhớ khi thêm ký tự hay không.
- Tối ưu hóa hiệu năng bằng cách ước lượng dung lượng cần thiết trước khi thực hiện các thao tác có thể làm thay đổi kích thước chuỗi.
- Tìm hiểu cách thức std::string quản lý bộ nhớ.
Ví dụ
#include <iostream>
#include <string>
int main() {
std::string str = "Hello";
std::cout << "Size: " << str.size() << std::endl;
std::cout << "Capacity: " << str.capacity() << std::endl;
str.reserve(100); // Yêu cầu capacity ít nhất là 100
std::cout << "Size after reserve(100): " << str.size() << std::endl;
std::cout << "Capacity after reserve(100): " << str.capacity() << std::endl;
str.append(" World!");
std::cout << "Size after append: " << str.size() << std::endl;
std::cout << "Capacity after append: " << str.capacity() << std::endl;
return 0;
}
Các hàm liên quan
reserve | Yêu cầu thay đổi dung lượng (capacity) của chuỗi, sao cho nó có thể chứa ít nhất một số lượng ký tự được chỉ định mà không cần phải cấp phát lại. |
length | Trả về số lượng ký tự hiện có trong chuỗi |
size | Trả về số lượng ký tự hiện có trong chuỗi |
max_size | Trả về số lượng ký tự tối đa mà một đối tượng std::string có thể chứa |