问题
今天在使用 transform 转换大小写的时候,转换不正确,没有结果。
原因
出问题的代码为: std::transform(src.begin(), src.end(), dest.begin(), ::toupper);
经过分析,因为源和目的不是同一个字符串,当目的字符串 size()
不够就会出现这种情况,就算 capacity()
够也不行,因为只有 size()
范围内的才是可以被下标访问的。
解决
在 transform 之前增加判断,判断两个字符串是否是同一个,是否 size 不够。
if (dest != src && dest.size() < src.size()) {}
参考:
C++中resize和reserve的区别
https://blog.csdn.net/yishizuofei/article/details/95456364