std::reverse必须配合迭代器使用,只接受起始和结束迭代器,不接受容器对象本身;正确写法是std::reverse(str.begin(), str.end()),返回void且就地修改。

reverse 函数必须配合迭代器使用,不能直接传字符串变量
很多人写 reverse(str) 报错,根本原因是 std::reverse 不接受 std::String 对象本身,只接受一对迭代器(起始和结束位置)。它本质是“反转一段连续内存里的元素”,和容器类型无关。
正确做法是传入 str.begin() 和 str.end():
std::string str = "hello"; std::reverse(str.begin(), str.end()); // ✅ 正确 // str 现在是 "olleh"
常见错误包括:
- 写成
reverse(str)→ 编译失败:no matching function - 写成
reverse(str.data(), str.data() + str.Length())→ 虽然能用,但没必要,begin()/end()更安全、更通用 - 对 const 字符串调用 → 编译失败:不能修改 const 对象
reverse 是就地反转,不返回新字符串
std::reverse 没有返回值(返回类型是 void),它直接修改原容器。如果需要保留原字符串并得到反转副本,得手动拷贝:
立即学习“C++免费学习笔记(深入)”;
std::string original = "world"; std::string reversed = original; // 先拷贝 std::reverse(reversed.begin(), reversed.end()); // 再反转副本
别指望这行代码能工作:std::string s = reverse(s1.begin(), s1.end()); —— 它语法错误,且 reverse 根本不返回任何东西。
如果你习惯函数式风格,可以封装一个辅助函数:
std::string reversed(const std::string& s) { std::string r = s; std::reverse(r.begin(), r.end()); return r; }
reverse 支持所有支持随机访问/双向迭代器的容器
不只是 std::string,std::vector、std::deque、原生数组(用指针)也都适用:
std::vectorv = {1,2,3}; std::reverse(v.begin(), v.end()); -
char arr[] = "test"; std::reverse(arr, arr + 4);(注意长度是 4,不是 5,因为不包含末尾