[C++][STL]resize函数问题

问题

请看如下两个代码

代码1

#include<iostream>
#include<string>
using namespace std;
int main(){
	string a,b;
	a.append("hello");
	b.append("hello");
	if(a == b) cout << "a == b" << endl;
	else cout << "a != b" << endl;
	return 0;
}

代码2

#include<iostream>
#include<string>
using namespace std;
int main(){
	string a,b;
	a.resize(10);
	a.append("hello");
	b.append("hello");
	if(a == b) cout << "a == b" << endl;
	else cout << "a != b" << endl;
	return 0;
}

问:两份代码的输出分别是什么?
答:
第一份代码输出a == b,第二份代码输出a != b


分析

这里要注意调用resize函数的效果。

使用resize函数能够修改容器的size。
如果 原 s i z e < 目 标 s i z e 原size < 目标size size<size,即原本容器中元素个数小于目标个数,则会使用默认值扩充至目标数额。

因此要特别注意容器在使用resize函数后进行容器间比较可能存在的问题(如示例代码)。

注:欢迎阅读我的另一篇文章了解更多:vector size max_size capacity区别与理解

补充

当对初始分配空间可能较小的容器进行随机访问时,可能会出现越界访问的情况。
这时可能会使用函数resize调整长度大小,避免越界问题的发生。如以下代码所示。

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> a;
	a.resize(10); // 要对a[9]进行访问,需要保证容器的size至少为9
	a[9] = 100;
	return 0;
}

当应该注意resize函数实际上可能会对原本容器中的末尾进行增加/删减操作。

那么新问题来了,是否可以用reserve函数代替resize函数避免此类越界问题的发生呢?答案是不可以。
具体原因欢迎阅读的另外一篇文章了解:关于使用reserve函数取代resize函数避免越界的问题

注意:这里的容器特指具有顺序存储结构的STL容器。


原创不易,感谢支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wingaso

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值