string的reserve和resize |
您所在的位置:网站首页 › reserve函数 › string的reserve和resize |
一、size和capicity size是实际长度,capicity是预留空间,请看下面的例子。 (1)str 是个空字符串,它的 size 为0,但它的 capicity 为15 (2)继续往下调试走: str 被赋予了字符串 "123456" ,它的 size 变成了6 ,capicity还是15 (3)继续往下调试走: str 被赋予了字符串 "123456123456" ,它的 size 变成了12 ,capicity还是15 (4)继续往下调试走: str 被赋予了字符串 "123456123456123456" ,它的 size 变成了18 ,capicity变成了 31 (5)继续往下调试走: str 被赋予了字符串 "1" ,它的 size 变成了1,capicity还是 31
二、reserve 可以使用 reserve 函数来指定 capicity 的大小: int N = 10; string str; str.reserve(N);但需要注意的是 str 的capicity 的大小并不一定是 n, 按照:(i*16-1)的规律,i>=1,取 capicity = (i*16-1)>=N,并使得 capicity 离 N最近。例如上例,capicity = 15。
三、resize 可以使用 resize函数来指定 size 的大小,也就是字符串的实际大小。 在此过程中可能会发生字符串的截断或者扩展: 1.扩展 可以看到,str 的size 和 capicity都发生了变化,在原有的字符串后面用 \0 补齐。 2.截断 str 被截断成两个字符,capicity 没有发生变化。
四、小结 string的size是实际长度,capicity是预留长度, 当字符串被赋予的值的长度大于capicity的时候,字符串会先自动扩容,使用(i*16-1)规则来扩容, 保证capicity大于等于被赋予的值的长度,最后完成赋值。 所以如果事先知道被赋值得字符串的大小,可以先用reserve来设置capicity的大小,有时候可提高程序性能: string remove_crtl(string s) { string result; result.reserve(s.length()); //用reserve一次扩容到位,避免多次扩容 for(int i=0;i=0x20) result +=s[i]; } return result; } |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |