C++ STL标准库,rotate函数详解

rotate翻译

rotate

  • v.(使)旋转,(使)转动;(人员)轮换,轮值;轮种,轮作;定期调换地点(或位置)
  • adj.(植) 辐状的

在这里,C++STL中的rotate指“旋转”意义

rotate简介

rotate

为了理解如何旋转序列,可以将序列中的元素想象成手镯上的珠子。rotate() 操作会导致一个新元素成为开始迭代器所指向的第一个元素。在旋转之后,最后一个元素会在新的第一个元素之前。

rotate深度解析

1) 进行元素范围上的左旋转。

 具体而言, std::rotate 交换范围 [first, last) 中的元素,方式满足元素 n_first 成为新范围的首个元素,而 n_first - 1 成为最后元素。

 此函数的前提条件是 [first, n_first) 和 [n_first, last) 为合法范围。

参数

first-原范围的起始
n_first-应出现在旋转后范围起始的元素
last-原范围的结尾
policy-所用的执行策略。细节见执行策略

复杂度

与 first 和 last 间的距离成线性。

示例

std::rotate 在许多算法中是常用的构建块。此示例演示插入排序:

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    vector<int> v{2, 4, 2, 0, 5, 10, 7, 3, 7, 1}; 
 
    cout << "before sort:      ";
    for (int n: v)
        cout << n << ' ';
    cout << '\n';
 
    // 插入排序
    for (auto i = v.begin(); i != v.end(); ++i) {
        rotate(upper_bound(v.begin(), i, *i), i, i+1);
    }
 
    cout << "after sort:       ";
    for (int n: v)
        cout << n << ' ';
    cout << '\n';
 
    // 简单地旋转到左侧
    rotate(v.begin(), v.begin() + 1, v.end());
 
    cout << "simple rotate left  : ";
    for (int n: v)
        cout << n << ' ';
    cout << '\n';
 
    // 简单地旋转到右侧
    rotate(v.rbegin(), v.rbegin() + 1, v.rend());
 
    cout << "simple rotate right : ";
    for (int n: v)
        cout << n << ' ';
    cout << '\n';
 
}
输出:
before sort:      2 4 2 0 5 10 7 3 7 1 
after sort:       0 1 2 2 3 4 5 7 7 10 
simple rotate left : 1 2 2 3 4 5 7 7 10 0
simple rotate right: 0 1 2 2 3 4 5 7 7 10
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值