C++ reverse函数源码解析
逆序(反转)无论是在C或是C++中用的都特别多,常用于数组,字符串,容器等,其本身的函数参数也不复杂。
标准C中是没有reverse()函数的,这是C++的一个新增函数,使用需要包含头文件
#include <algorithm>
reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first,BidirectionalIterator last);
例如,交换vector容器中元素的顺序
vector<int> v = {5,4,3,2,1};
reverse(v.begin(),v.end());//v的值为1,2,3,4,5
还有string类的字符串
string str="www.mathor.top";
reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww
给出函数原型,该函数等价于通过调用iter_swap来交换元素位置
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last)
{while ((first!=last)&&(first!=--last)){std::iter_swap (first,last);++first;}
}
最后追加一个完整例子:
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;
template <class BidirectionalIterator>
void my_reverse (BidirectionalIterator first, BidirectionalIterator last)
{while ((first!=last)&&(first!=--last)) {std::iter_swap (first,last);++first;}
}int main()
{int myints[] = {1,2,3,1};int len = sizeof(myints)/sizeof(int);vector<int> vec(myints, myints + len);my_reverse(vec.begin(), vec.end());for(int x: vec)cout<<x<<",";return 0;
}
参考:C++ reverse函数的用法
C++ reverse函数源码解析相关推荐
- OpenCV resize函数源码解析——加速方法
相信大家应该经常会用到OpenCV中的函数resize(),当我们想放大或者缩小图像的时候,会用到这个函数进行图像缩放,其中最核心的便是对图像的像素进行插值处理. 这里的插值interpolation ...
- [OpenGL] 视图矩阵(View)矩阵与glm::lookAt函数源码解析
一.视图矩阵(View)矩阵 首先明确视图矩阵的作用:在OpenGL的众多坐标系中,存在一个世界坐标系和一个摄像机坐标系,视图矩阵的作用就是将世界坐标系内的坐标转换成摄像机坐标系内的坐标. 如图,空间 ...
- transformers.generator_utils函数源码解析之sample生成(包括temperature、TopK、TopP函数解析)
sample函数相较于beam_search函数要简单的多,但是需要注意的一点是,sample需要搭配logits_warper处理器列表使用,相应三类处理器函数解析在下面.sample函数的源码解释 ...
- Java,Math类中的ceil、floor和round函数源码解析以及自己重写实现
1. ceil.floor和round的功能 首先,这三个方法都是Math类的静态方法,而且类Math在java.lang包下,所以我们在代码中可以直接调用Math的方法. Math.ceil(dou ...
- PHP 源码 —— is_array 函数源码分析
is_array 函数源码分析 本文首发于 https://github.com/suhanyujie/learn-computer/blob/master/src/function/array/is ...
- 《安富莱嵌入式周报》第305期:超级震撼数码管瀑布,使用OpenAI生成单片机游戏代码的可玩性,120通道逻辑分析仪,复古电子设计,各种运动轨迹函数源码实现
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - P ...
- 【SA8295P 源码分析】22 - QNX Ethernet MAC 驱动 之 emac_entry / emac_attach 函数源码分析
[SA8295P 源码分析]22 - QNX Ethernet MAC 驱动 之 emac_entry / emac_attach 函数源码分析 一.EMAC:libdevnp-emac-eth.so ...
- LMDIF_函数源码
函数源码: /* lmdif.f -- translated by f2c (version 20020621).You must link the resulting object file wit ...
- 【Linux 内核】实时调度类 ⑦ ( 实时调度类核心函数源码分析 | dequeue_task_rt 函数 | 从执行队列中移除进程 )
文章目录 一.dequeue_task_rt 函数 ( 从执行队列中移除进程 ) 二.update_curr_rt 函数 ( 更新调度信息 ) 本篇博客中 , 开始分析 struct sched_cl ...
最新文章
- C#的基础琐碎总结-----委托
- javascript 垃圾回收机制--分代式垃圾回收机制
- Oracle 增删改查
- 快速学习AJAX之三 Ajax实现登陆
- 初学者学习java编程,如何顺利通过4大艰难阶段?
- mysql使用jpa仓储查询报错_Jpa自动查询报错
- 5-3 面向可维护性的构造技术
- Zabbix学习(十七)zabbix low-level discover zabbix批量部署必备
- miui11是android几,miui11是安卓几
- 微积分中BW定理指的是什么
- 连接 GIS Servers报错“Proxy server got bad address from remote server ...”
- Arduino 超声波避障循迹小车,四轮智能小车
- 又是灵格斯导致软件自动关闭
- 关于卸载驱动精灵后蓝屏的办法
- 视频教程-【深入理解计算机网络】入门计算机网络基础视频课程(下)-计算机网络
- Jinjia2模板控制语句
- 考研-作息时间安排表(总结)
- 【Java】为什么不推荐程序员去外包公司?
- 老猿Python博客文章目录索引
- 微信还能这么玩?半透明的微信背景主题用起来!
热门文章
- EPUB和PDF的区别,有什么好用的IOS手机epub阅读器
- 这是基于three.js+photo-sphere-viewer.js 全景图场景切换
- gcc 编译相关CFLAGS LDFLAGS LIB
- IE浏览器如何设置代理ip教程
- “Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题
- java中中国货币符号怎么打_用Java中的货币符号解析价格
- 第一章 计算机网络体系
- MapStruct文档
- 到底如何区分什么是架构、框架、模式和平台 ?
- Python3版本Django实现免费极验验证码