STL——resize()函数对string、vector、list分配内存空间的影响

 

 

#include"iostream"
#include"list"
#include"algorithm"
#include"vector"
#include"algorithm"
using namespace std;
void fun(int &a){

	cout<<a;
}
int main(){
	/*
	resize 函数在str中
	要重新设置的大小为:b
	当前的大小为:a
	若:b<=a,则capacity=a
	若:b>a,则capacity=15+16t>b,其中,S.t. min(t)
	变化为:15 31 47 ...
	*/
	string str("abcdefg");
	cout<<str.capacity()<<endl;//15
	str.resize(5);
	cout<<str.capacity()<<endl;//15
	str.resize(20);
	cout<<str.capacity()<<endl;//15,31,47,63
	str.resize(48);
	cout<<str.capacity()<<endl;//

	cout<<"............."<<endl;

	/*
	resize 函数在vector中
	要重新设置的大小为:b
	当前的大小为:a
	若:b<=a,则capacity=a
	若:a<b<=1.5*a,则capacity=1.5*a
	若:b>1.5*a,则capacity=b
	*/
	vector<int> vec1(6);
	for(int i =0;i<vec1.size();i++){
		vec1[i] = i;
	}
	for_each(vec1.begin(),vec1.end(),fun);
	cout<<endl;
	cout<<vec1.capacity()<<endl;
	vec1.resize(10);
	cout<<vec1.capacity()<<endl;



	/*
	resize 函数在list中
	重新设置的大小为:b,则当前的大小为:b
	*/
	cout<<"............."<<endl;
	list<int> lst(5);
	for_each(lst.begin(),lst.end(),fun);
	cout<<endl;
	cout<<lst.size()<<endl;
	lst.resize(20);
	cout<<lst.size()<<endl;
	lst.resize(10);
	cout<<lst.size()<<endl;

	system("pause");
	return 0;
}

 

STL vectorresize函数用于改变容器的大小,可以增加或减少元素的数量。它的语法如下: ```cpp void resize(size_type count); void resize(size_type count, const value_type& value); ``` 第一个重载函数接受一个`count`参数,表示调整后的容器大小。如果`count`小于当前容器的大小,则会删除多余的元素;如果`count`大于当前容器的大小,则会添加默认构造的元素来填充新位置。 第二个重载函数还接受一个`value`参数,表示要用于填充新位置的元素值。 以下是一个使用resize函数的示例: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> myVec; std::cout << "Before resize: size = " << myVec.size() << std::endl; myVec.resize(5); std::cout << "After resize: size = " << myVec.size() << std::endl; return 0; } ``` 输出结果为: ``` Before resize: size = 0 After resize: size = 5 ``` 在这个示例中,我们先创建了一个空的vector,然后调用resize函数将容器大小改为5。通过查看容器的大小,我们可以看到大小已经改变为5,并且新位置被默认构造的元素填充。 注意,如果使用第二个重载函数并提供了`value`参数,则新位置将使用指定的值进行填充。例如,`myVec.resize(5, 10)`会将容器大小改为5,并用值为10的元素填充新位置。 需要注意的是,resize函数可能会导致元素的增加或删除,因此在使用时要小心,确保不会丢失或产生不必要的元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值