C++算法(17):reverse函数用法详解,头文件<algorithm>与实战示例

发布于:2025-05-01 ⋅ 阅读:(62) ⋅ 点赞:(0)

C++中,std::reverse 函数用于反转容器或数组中元素的顺序,需包含头文件 <algorithm>。以下是其用法详解:

基本用法

函数原型

template <class BidirIt>
void reverse(BidirIt first, BidirIt last);
  • 参数:两个双向迭代器 first 和 last,表示反转的范围 [first, last)(左闭右开)。

  • 作用:将区间内的元素逆序排列。

  • 0

示例代码

1. 反转整个容器
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector<int> v = {1, 2, 3, 4, 5};
    reverse(v.begin(), v.end()); // 反转整个vector
    // v变为 {5, 4, 3, 2, 1}

    // 输出结果
    for (int num : v) cout << num << " "; // 输出:5 4 3 2 1
    return 0;
}
2. 反转数组
int arr[] = {1, 2, 3, 4, 5};
reverse(arr, arr + 5); // 反转整个数组
// arr变为 {5, 4, 3, 2, 1}
3. 反转字符串
string s = "hello";
reverse(s.begin(), s.end()); // s变为 "olleh"
4. 反转部分元素
vector<int> v = {1, 2, 3, 4, 5};
reverse(v.begin(), v.begin() + 3); // 反转前3个元素
// v变为 {3, 2, 1, 4, 5}

注意事项

与成员函数对比

std::list 的 reverse 成员函数更高效,建议优先使用:list<int> lst = {1, 2, 3, 4, 5}; lst.reverse(); // 成员函数,时间复杂度 O(n)

  1. 迭代器有效性:需确保 first 在 last 之前,否则行为未定义。

  2. C风格字符串:反转时需避免包含末尾的 \0,例如:

    char str[] = "hello"; // 实际存储为 {'h','e','l','l','o','\0'}
    reverse(str, str + 5); // 正确:反转前5个字符,得到 "olleh"
    // 错误示例:reverse(str, str + 6); // 包含'\0',导致打印异常
  3. 时间复杂度:O(n),执行 (last - first)/2 次交换。

  4. 容器支持:需支持双向迭代器(如 vectordequeliststring)。单向容器(如 forward_list)需特殊处理。

总结

std::reverse 是一个灵活的工具,适用于大多数支持双向迭代器的容器。使用时需注意迭代器范围和特殊数据结构(如C字符串)的边界条件。


网站公告

今日签到

点亮在社区的每一天
去签到