当前位置: 首页 > 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.dtcms.com/a/164111.html

相关文章:

  • Linux基础篇、第一章_01_2安装虚拟机手动安装Rocky Linux 9.5
  • CentOS一键安装MySQL5.7(源码安装)
  • PHP代码-服务器下载文件页面编写
  • tarjan缩点+强联通分量
  • 数据库day-08
  • 医药生产的“神助攻”:疆鸿智能JH-ECT012,EtherCAT转CC LINK IE超靠谱
  • 如何有效保护iOS应用?分享一款实用的IPA混淆工具
  • Java高频面试之并发编程-10
  • 【无需安装额外软件,JavaScript脚本】B站批量取消关注
  • Consul安装部署(Windows环境)
  • 为什么要学习《易经》?
  • ESP32- 开发笔记- 软件开发 4 - GPIO 口
  • 学习基本宠物美容
  • 使用org.java_websocket库第三方库实现广播
  • RISC-V架构低功耗MCU中断控制系统设计
  • 《Vue3学习手记7》
  • 3D Gaussian Splatting部分原理介绍和CUDA代码解读
  • grafana/loki 设置日志保留时间
  • C++的vector中emplace_back() 与 push_back() 的区别
  • 高防 CDN 的防护功能有哪些?从基础防护到智能防御的全面解析
  • redis高级进阶
  • 记录 Flink jdbc、mysql-cdc 连接 mysql8 碰到的适配问题
  • Leetcode刷题记录22——滑动窗口最大值
  • AI Agent Protocols:现状、挑战与未来展望
  • 耐高低温抗金属RFID标签种类和应用场景
  • 【全国产化】基于飞腾 FT2000+/64 核的服务器主板设计与实践
  • LVGL -窗口操作
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(3):MCP 安全体系建设
  • Unity-Shader详解-其三
  • 前端防护利器:disable-devtool 使用指南 - 保护你的Web应用安全