C++标准库函数 std::rotate

std::rotate 是 C++ 标准库中的一个算法函数,它的作用是将一个范围内的元素向左或向右旋转,使某个元素成为新的起始点。它会重新排列指定范围内的元素,但不会改变元素的顺序结构。

函数签名:

template <class ForwardIt>
ForwardIt rotate(ForwardIt first, ForwardIt middle, ForwardIt last);

参数说明:
first: 指向要旋转的范围的起始位置。
middle: 指向新的起始点,即旋转后第一个元素的位置。
last: 指向要旋转的范围的结束位置(不包括)。
返回值:
std::rotate 返回旋转后原始范围中最初位于 middle 位置的元素的新位置。

举个例子:
假设你有一个整数数组 [1, 2, 3, 4, 5],并希望将数组旋转,使得元素 3 成为第一个元素。

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 旋转, 使得 3 成为第一个元素
    std::rotate(vec.begin(), vec.begin() + 2, vec.end());

    // 输出结果
    for (int v : vec) {
        std::cout << v << " ";
    }

    return 0;
}

运行结果:

3 4 5 1 2

解释:
在调用 std::rotate 之前,数组是 [1, 2, 3, 4, 5]。
std::rotate(vec.begin(), vec.begin() + 2, vec.end()); 将 3 作为新的起始点。vec.begin() + 2 指向 3。
旋转后,数组变成 [3, 4, 5, 1, 2]。
进一步解释:
first 指向 1,middle 指向 3,last 指向 5 后的位置。
旋转会将 [first, middle) (即 [1, 2])这部分移动到 [middle, last) (即 [3, 4, 5])的后面,而 [middle, last) 这部分移到开头。
这种操作在处理需要调整顺序但保留相对顺序的场景中非常有用。

前向迭代器(ForwardIterator)简介

前向迭代器是一种迭代器类型,它支持以下操作:
可以通过解引用来访问元素。
可以向前移动(支持++操作符)。
任何可以用前向迭代器的算法,也可以用更强的随机访问迭代器来工作(如std::vector和std::array的迭代器)。
C++标准库中的容器如std::vector、std::list、std::deque等都提供了前向迭代器,因此你可以直接在这些容器上使用std::rotate。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值