std::reverse反转字符串需作用于可修改容器且传入合法迭代器范围,对只读字符串或字面量调用会触发未定义行为;其时间复杂度o(n/2)、空间复杂度o(1),但不可逆,频繁切换序访问应优先用反向迭代器。

std::reverse 反转字符串的正确用法
直接对 std::String 调用 std::reverse 是安全且高效的,前提是传入合法的迭代器范围。它不关心底层是字符数组还是动态分配的内存,只操作 [begin, end) 区间。
常见错误是传入 C 风格字符串字面量地址,比如 std::reverse("hello", "hello" + 5) —— 这会触发未定义行为,因为字面量存储在只读段。
- 必须作用于可修改的容器:如
std::string、std::vector<char></char>或堆/栈上声明的char[] - 迭代器必须有效且可写:
s.begin()和s.end()是最常用也最安全的选择 - 对空字符串或单字符调用
std::reverse完全合法,无副作用
#include <string> #include <algorithm> #include <iostream> <p>int main() { std::string s = "world"; std::reverse(s.begin(), s.end()); // ✅ 正确 std::cout << s << "n"; // 输出: dlrow }
反转 C 风格字符数组(char[])要注意边界
对栈上声明的 char arr[N] 使用 std::reverse 时,必须确保传入的结束迭代器准确指向末尾后一位,不能多也不能少。用 sizeof(arr) 计算长度比用 strlen 更可靠,尤其当数组含 ‘