You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过反向迭代器构造反转的std::string?

用反向迭代器构造反转std::string的问题解决

你写的代码触发std::length_error的原因很直接:std::string的迭代器构造函数要求第一个参数是区间的起始迭代器,第二个是结束迭代器,但你把参数顺序搞反了。

  • str.rend()是反向迭代器的「结束位置」,对应原字符串第一个字符之前的位置
  • str.rbegin()是反向迭代器的「起始位置」,对应原字符串最后一个字符的位置

当你把结束迭代器放在前面、起始迭代器放在后面时,构造函数计算两个迭代器的距离会得到负数,直接触发长度错误。

正确写法

只需要调整两个迭代器的顺序:

std::string reverse_string(std::string str) {
  return std::string(str.rbegin(), str.rend());
}

这样构造函数会从str.rbegin()(原字符串最后一个字符)开始,遍历到str.rend()(原字符串第一个字符之前),正好逆序取出所有字符,构造出反转后的字符串。

补充实现方式

如果不执着于迭代器构造,也可以直接用std::reverse修改原字符串:

std::string reverse_string(std::string str) {
  std::reverse(str.begin(), str.end());
  return str;
}

内容的提问来源于stack exchange,提问作者Pierre Thierry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:08:10