暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C++高级学习:第二十六节-反转函数

Cpp入门到精通 2024-03-27
34

点击蓝字 关注我们

c++高级学习

第二十六节  反转函数


     反转函数通常用于将某个序列或容器中的元素顺序颠倒,即将原来排在前面的元素放到后面,原来排在后面的元素放到前面。我们来学习两种反转函数: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++高级学习:第二十二节-替换函数

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

          文章转载自Cpp入门到精通,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论