网站的备案编号,吉林市教做网站,急求聊城网站建设,推广seo是什么意思系列文章
http://t.csdnimg.cn/u80hL 目录 系列文章[TOC](目录) 一、reserve——请求容量的变化二、resize——操作对象使用的空间 一、reserve——请求容量的变化
改变对象的capacity——他会请求开辟和缩小对象所占的空间#xff0c;reserve只能操作对象未使用的空间…系列文章
http://t.csdnimg.cn/u80hL 目录 系列文章[TOC](目录) 一、reserve——请求容量的变化二、resize——操作对象使用的空间
一、reserve——请求容量的变化
改变对象的capacity——他会请求开辟和缩小对象所占的空间reserve只能操作对象未使用的空间其存在意义为因为开辟空间的操作所消耗的资源太多了所以在知道需要多少空间的前提下请求提前一次性开辟一个确定够用的空间避免反复开空间reserve请求实际开辟的空间大小会大于或等于我们给出的数值具体值根据不同的编译器有所不同如g会给等于数值大小的空间、visual会给数值1.5倍大小的空间如果对象已经使用了空间而我们使用reserve请求变化的空间值小于对象使用的空间会有两种情况 情况1请求的新空间大于等于对象已经使用的空间大小此时编译器会在保留对象已经使用的空间不受干扰的情况下去释放对象没有使用的空间 情况2请求的新空间小于对象已经使用的空间大小此时编译器会将空间缩小到刚好存储对象已经使用的空间大小
如代码所示请求开辟较大的空间、请求缩小空间
#includeiostream
using namespace std;
int main()
{//reservestring 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请求编译器会根据具体的情况决定要不要执行我们的开拓和缩小请求。 二、resize——操作对象使用的空间
通过resize我们可以直接操作对象使用的空间这种操作是强硬的resize的操作会有3种情况
情况1resize的空间大于原size和capacity此时原size会被扩大到新的size大小那些没有实质内容的空间可以指定一种字符去填充如果没有指定则会自动用’\0’填充而capacity会自动扩容直到可以包括下新的size
情况2resize的空间大于原size而小于capacity此时原size会被扩大到新的size大小那些没有实质内容的空间可以指定一种字符去填充如果没有指定则会自动用’\0’填充
情况3resize的空间小于原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;
}