std :: basic_string :: reserve()细节

时间:2017-04-27 20:16:57

标签: c++ language-lawyer

我正在阅读std::basic_string::reserve(size_type res_arg=0)上的标准。它说:

  

void reserve(size_type res_arg=0);

     

成员函数reserve()是一个通知a的指令   basic_­string计划更改大小的对象,以便它可以   相应地管理存储分配。

     

效果:reserve()之后,capacity()大于或等于   储备论证。 [注意:使用res_arg调用reserve()   小于capacity()的参数实际上是非约束性收缩   请求。使用res_­arg <= size()的呼叫实际上是非绑定的   缩小到适合的要求。 - 尾注]

     

如果res_­arg > max_­size()

,则抛出:length_error

标准似乎区分了调用reserve() res_arg < capacity()reserve()调用res_arg <= size()

res_arg <= size()很容易理解,shrink_to_fit()被调用,实现可以自由地做任何想做的事情,因为它不具有约束力。

res_arg < capacity()的案例呢?标准说“非约束性收缩请求”而不是“非绑定收缩适合请求”。收缩适合请求和收缩请求之间有什么区别?这只是一个不幸的不一致吗?

2 个答案:

答案 0 :(得分:1)

std::string::shrink_to_fit()会将capacity()缩小为size()。这是不同的,然后将capacity()缩小为小于capacity()但大于size()的数字。实际上

std:string foo = "test";
foo.reserve(20);      // capaicty:20 size:4
foo.reserve(10);      // capaicty:10 size:4
foo.reserve(20);      // capaicty:20 size:4
foo.shrink_to_fit();  // capaicty:04 size:4

答案 1 :(得分:0)

  

缩小以适应:减小容量以适应大小。

谷歌首次提到的是vector

收缩得很好,收缩(容量下降)。如果你保留的当前尺寸少于当前的尺寸,那就是准备减少容器以适应更短的字符串,因此“适合”。