http://t.csdnimg.cn/u80hL
如代码所示,请求开辟较大的空间、请求缩小空间:
#include<iostream>
using namespace std;
int main()
{
//reserve
string s1; //定义一个对象
s1 = "0123456789";
cout << s1 << endl;
cout << s1.size() << endl;
cout << s1.capacity() << endl;
cout << endl;
s1.reserve(30); //给这个对象请求更大的空间使用权
cout << s1 << endl;
cout << s1.size() << endl;
cout << s1.capacity() << endl;
cout << endl;
s1.reserve(15); //请求给对象更小的使用权
cout << s1 << endl;
cout << s1.size() << endl;
cout << s1.capacity() << endl;
return 0;
}
ps. 在实践时我发现,编译器会优化我们的 reserve()请求,编译器会根据具体的情况决定要不要执行我们的开拓和缩小请求。
情况1:resize的空间大于原size和capacity,此时原size会被扩大到新的size大小,那些没有实质内容的空间可以指定一种字符去填充,如果没有指定则会自动用’\0’填充,而capacity会自动扩容直到可以包括下新的size;
情况2:resize的空间大于原size而小于capacity,此时原size会被扩大到新的size大小,那些没有实质内容的空间可以指定一种字符去填充,如果没有指定则会自动用’\0’填充;
情况3:resize的空间小于原size,此时编译器会舍去不在新size存储空间里面的信息,而capacity不做改变;
如下代码,使用resize()扩大和缩小对象空间使用。
void test2()
{
string s2; //定义一个对象
s2 = "0123456789";
cout << s2 << endl;
cout << s2.size() << endl;
cout << s2.capacity() << endl;
cout << endl;
s2.resize(20);
cout << s2 << endl;
cout << s2.size() << endl;
cout << s2.capacity() << endl;
cout << endl;
s2.resize(5);
cout << s2 << endl;
cout << s2.size() << endl;
cout << s2.capacity() << endl;
cout << endl;
}