📅  最后修改于: 2023-12-03 15:07:38.354000             🧑  作者: Mango
旋转是指将数组或向量等容器中的元素按照一定规律进行换位操作。在 C++ 中,可以通过以下方式实现旋转操作:
std::rotate
std::rotate
是 C++ 标准库提供的旋转函数,可以对 std::vector
及其它容器进行旋转操作。其函数原型为:
template <class ForwardIt>
void rotate(ForwardIt first, ForwardIt n_first, ForwardIt last);
rotate
函数接受三个迭代器作为参数。其中,first
是要旋转的元素的起始位置,n_first
是旋转后的第一个元素的位置,last
是要旋转的元素的结束位置。
下面是一个例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
std::rotate(v.begin(), v.begin() + 2, v.end());
for (auto i : v)
std::cout << i << " ";
return 0;
}
此时输出为:
3 4 5 1 2
这里将 v
中从第一个元素开始的两个元素旋转到了容器的末尾,得到了一个新的向量。
如果你想手动实现一个旋转函数,可以采用以下思路:
first
至 n_first - 1
的元素逆序排列;n_first
至 last - 1
的元素逆序排列;下面是一个示例实现:
#include <iostream>
#include <vector>
template <typename RandomAccessIterator>
void my_rotate(RandomAccessIterator first, RandomAccessIterator n_first, RandomAccessIterator last)
{
std::reverse(first, n_first);
std::reverse(n_first, last);
std::reverse(first, last);
}
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
my_rotate(v.begin(), v.begin() + 2, v.end());
for (auto i : v)
std::cout << i << " ";
return 0;
}
执行结果与前面的示例相同。
无论是使用 std::rotate
还是手动实现旋转函数,都可以快速有效地对容器进行旋转操作。在实际应用中,可以根据需要选择不同的实现方式。