我正在尝试分配准确容量的字符串。这样做是为了节省内存。要创建的字符串大小是可变的,但需要事先知道。
我正在尝试使用储备金,但是容量不兑现,并且出现了超额分配。
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
我知道储备金是here所述的非约束性请求
是否有一些方法可以确保分配大小正确的字符串。
答案 0 :(得分:4)
简而言之:否,没有。
您可以精确控制string
的 size ,但不能控制其容量。 C ++对实现应采用的容量没有任何限制-实现可以选择(认为)有效的任何方法。只有大小是固定的。
P.S。通常不认为几十个字节会浪费内存。 STL容器旨在在时间效率和空间效率之间进行折衷。
答案 1 :(得分:-6)
您可以使用以下内容:
std::string str;
str = "12345678901234567890";
str.shrink_to_fit();
输出如下:
size: 20
length: 20
capacity: 20