std::string::reserve没有被允许创建具有精确容量的std::string



我正在尝试分配精确容量的字符串。这样做是为了节省内存。要创建的字符串的大小是可变的,但事先已知。

我正在尝试使用储备,但容量没有得到满足,而且正在发生超额分配。

std::string str;
str.reserve(21);
str = "12345678901234567890";
std::cout << "size: " << str.size() << "n";
std::cout << "length: " << str.length() << "n";
std::cout << "capacity: " << str.capacity() << "n";

上述输出如下:

size: 20
length: 20
capacity: 30
max_size: 9223372036854775807

我知道保留是一个无约束力的请求,如这里所述

是否有某种方法可以确保分配精确大小的字符串。

简而言之:没有,没有。

您可以精确控制string大小,但不能控制其容量。C++对实现应该具有的容量没有任何限制——实现可以选择(它认为(有效的容量。只有大小是固定的。

附言:几十个字节通常不被认为是浪费内存。STL容器是为时间效率和空间效率之间的折衷而设计的。

您可以使用以下内容:

std::string str;
str = "12345678901234567890";
str.shrink_to_fit();

输出如下:

size: 20
length: 20
capacity: 20

最新更新