C字符串使用最大缓冲区分配?

我声明了一个变量字符串s;

并且做s =“abc”;现在它有3个字符的缓冲区.

s =“abcd”它有4个字符的缓冲区.

现在是第三个声明之后

s =“ab”问题是它会保留4个字符的缓冲区还是会重新分配2个字符的缓冲区?

如果它将分配2个字符缓冲区有任何方法我可以告诉它保持分配的最大缓冲区.

那么它是否保留了最大大小的缓冲区?

s = "ab"
s="abc"
s="a"
s="abcd"
s="b"

现在它应该保持4的缓冲区.

那可能吗?

解决方法

s = “ab” question is will it keep buffer of 4 words or will it
reallocate 2 word buffer ?

它不会重新分配缓冲区.我不知道它是否在标准中提到过,但我所见过的所有实现只有在需要增加容量时才会发出重新分配.永远不要减少.即使你有一个包含4个字符的字符串并调用.resize(2)或.reserve(2),容量也不会改变.为了强制字符串(或容器)重新分配内存以适应确切的大小,有一个简单的交换技巧

s.swap(string(s));

这里发生了什么?你创建一个临时的s,其容量将完全等于s.size(),然后将其与原始字符串交换.临时的析构函数将释放所有必要的资源.

同样,我并不认为这是标准的,但我见过的所有实现都有这种行为.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...