String的长度(size)和容量(capacity),resize()与reverse()

String的长度(size)和容量(capacity),resize()与reverse() resize()调整长度,reverse()调整容量,容量永远大于等于长度#include iostream using namespace std; int main(){ string s; couts.empty()endl; couts.size()\ts.capacity()endl; sabcdefghijklmnopqrstuvwxyz; couts.size()\ts.capacity()endl; sabcdefghijklmnopqrstuvwxyzabcdefg; couts.size()\ts.capacity()endl; s.resize(20); couts.size()\ts.capacity()endl; s.resize(70); couts.size()\ts.capacity()endl; s.reserve(80); couts.size()\ts.capacity()endl; s.reserve(50);//或s.reserve() couts.size()\ts.capacity()endl; return 0; }实际输出结果与执行环境有关可能会有所差异但是原理上相同。可以通过resize()函数调整字符串的长度(size)通过reserve()函数调整字符串的容量(capacity)。size调整时会导致capacity跟随发生变化但是capacity调整时size不会发生变化。empty可以判断一个字符串是否为空其效率比size()函数要高。第7行看到空字符的size为0但是其容量并非为0也就是说当字符数量小于15时不需要为该字符串重新分配空间。第8行因为新字符串长度超过15size变为实际长度26但是capacity3026第10行再次打破capacity的限制变成33后capacity被调整为60。第12行通过resize函数将size变小后capacity不会发生变化但第14行将size变大后超过了当前的capacitycapacity被再次扩容。可以确定capacity会一直大于等于size但具体的值是根据操作系统的策略进行动态调整的。string可以调用reserve()缩减实际容量。但用一个“小于现有容量”的参数调用reserve()是一种非强制性请求。也就是说可能想要缩减容量至某个目标但不保证一定达成。string的reserve()参数默认值为0所以调用reserve()并且不给参数就是一种“非强制性适度缩减请求”。第18行缩放目标小于size的值但新的capacity变为70并没有按照目标指示变成50或0。