此问题在此处已有答案:
why does my std::transform retuns nothing/empty string?(2个答案)
4天前关闭。
为什么std::transform不能以这种方式工作:
std::string tmp = "WELCOME";
std::string out = "";
std::transform(tmp.begin(), tmp.end(), out.begin(), ::tolower);
输出为空!
但这是可行的:
std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
我不希望就地进行转型。
2条答案
按热度按时间cyvaqqii1#
由于
out
的范围小于tmp
的范围,因此您正在超出范围的内存中写入。您可以通过应用std::back_inserter
将结果存储到out
中。正如user17732522所指出的,由于it's not legal to take the adress of a standard libary function,最好在需要时传递一个在角色上调用
std::tolower
的lambda对象。kyks70gy2#
一种方法是调整字符串的大小,以便为
std::transform
分配足够的内存来填充它。或者,正如其他人提到的,你可以使用
std::back_inserter
,它为你处理插入。我们也可以调用out.reserve
来保存分配时间(特别是当你的字符串很大的时候)。