
点击蓝字 关注我们

第二十六节 反转函数

反转函数通常用于将某个序列或容器中的元素顺序颠倒,即将原来排在前面的元素放到后面,原来排在后面的元素放到前面。我们来学习两种反转函数:reverse()和reverse_copy(),如果你们已经看过我之前的文章,就应该知道这两个函数有什么区别。
首先我们来讲reverse函数,这个函数我们之前已经接触过了,因为这几节我们一直在对算法进行讲述,所以我们在这里来介绍一下:
reverse函数用于反转容器中元素顺序。该算法会将指定范围内的元素顺序进行反转,并直接在原容器上进行修改,而不会创建新的容器。调用该函数后,指定范围内的元素顺序将被反转,即原来位于起始位置的元素会被移到结束位置之前,原来位于结束位置之前的元素会被移到起始位置之后,以此类推。
reverse函数有两个迭代器参数,表示待反转范围的起始位置和结束位置。
#include<iostream>using namespace std;#include<vector>#include<algorithm>void print(int x) {cout << x << " ";}int main() {vector<int>v1 = { 1,2,3,4,3,5,6 };cout << "反转前:";for_each(v1.begin(), v1.end(), print);reverse(v1.begin(), v1.end());cout << "\n反转后:";for_each(v1.begin(), v1.end(), print);cout << endl;system("pause");return 0;}
使用reverse后,指定范围内的元素顺序将被反转,即原来位于first位置的元素会被移last位置之前,原来位于last-1位置的元素会被移到first位置之后。
反转前:1 2 3 4 3 5 6反转后:6 5 3 4 3 2 1
reverse_copy 用于将容器中的元素按相反的顺序复制到另一个容器中,而不改变原始容器。
reverse_copy 函数接受三个迭代器参数:前两个参数定义了要复制的元素范围,最后一个参数定义了目标容器的起始位置,复制的元素将从该位置开始存放。
vector<int>v1 = { 1,2,3,4,3,5,6 };vector<int>v2(v1.size());cout << "反转前:v1容器:";for_each(v1.begin(), v1.end(), print);reverse_copy(v1.begin(), v1.end(),v2.begin());cout << "\n反转后:v1容器:";for_each(v1.begin(), v1.end(), print);cout << "\tv2容器:";for_each(v2.begin(), v2.end(), print);
使用reverse_copy 后,源容器 [v1begin(),v1.end()) 中的元素将按相反的顺序复制到目标容器中,从v2.begin()位置开始存放。返回值是一个指向输出范围的末尾后面位置的迭代器。
反转前:v1容器:1 2 3 4 3 5 6反转后:v1容器:1 2 3 4 3 5 6 v2容器:6 5 3 4 3 2 1
这两个函数的是不同的,这种不同不仅仅表现在reverse_copy要使用新容器。reverse 算法直接在原始容器上修改元素顺序,这种修改方式实际上swap算法的循环,而 reverse_copy 算法会将反转后的结果复制到一个新的容器中。
反转算法的相关操作的讲解到此结束,感谢观看!欢迎各位的点赞与关注!您的点赞和关注是我学习更新的动力!
END
往期推荐
C++高级学习:第二十五节-去重函数
C++高级学习:第二十四节-删除函数
C++高级学习:第二十三节-填充函数
C++高级学习:第二十二节-替换函数

分享、在看与点赞,至少我要拥有一个吧




