当前位置: 首页 > news >正文

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

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 1return 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字符串)的边界条件。

http://www.xdnf.cn/news/209467.html

相关文章:

  • CSS的三大特性:层叠、继承与优先级
  • UI-TARS论文解读 并提供镜像
  • 深入理解Spring AI框架的核心概念
  • HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • 深入理解 Linux 权限管理:从基础到进阶
  • Agent开源工具:mcp快速接入,mcp-use上手指南
  • 23G显存可以跑多大尺寸的Qwen3?
  • 第十六届蓝桥杯 2025 C/C++组 旗帜
  • 常见的 CSS 知识点整理
  • 20250429在Ubuntu 20.04.6下安装VMware Workstation16
  • [零基础]内网ubuntu映射到云服务器上,http访问(frp内网穿透)
  • Java controller接口出入参时间序列化转换操作
  • AimRT 从零到一:官方示例精讲 —— 六、pb_chn示例.md
  • OpenObserve API Usage Guide for Log Management
  • 四则运算+从单向链表中删除指定值的节点+名字的漂亮度+数独(Sudoku)
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • npm如何安装pnpm
  • Flip PDF Plus Corp7.7.22电子书制作软件
  • AimRT 从零到一:官方示例精讲 —— 一、工具链与基本概念
  • css3伸缩盒模型第一章(主轴以及伸缩盒模型)
  • P1903 [国家集训队] 数颜色 / 维护队列 Solution
  • neo4j暴露公网ip接口——给大模型联通知识图谱
  • Python 使用一等函数实现设计模式(案例分析:重构“策略”模式)
  • Linux 服务管理两种方式service和systemctl
  • Node.js 事件循环和线程池任务完整指南​
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
  • 阿里云服务迁移实战: 05-OSS迁移
  • 【Linux系统】systemV共享内存
  • 基于tabula对pdf中多个excel进行识别并转换成word中的优化(五)