在C++ STL中,旋转可以通过`rotate`算法实现。`rotate`算法的基本思想是将一个序列的元素移动,使得指定位置的元素移动到序列的前面,而序列中剩余的元素依次向后移动。
`rotate`函数的原型如下:
```cpp
template BidirectionalIterator rotate (BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); ``` 其中,`first`和`last`定义了要旋转的序列范围,`middle`是指向要移动到序列前面的元素的迭代器。 下面是一个使用`rotate`函数的示例: ```cpp include include include int main() { std::vector // 将第二个元素(值为3)移动到序列的前面 std::rotate(vec.begin(), vec.begin() + 1, vec.end()); // 输出旋转后的序列 for (int i : vec) { std::cout<< i << " "; } std::cout << std::endl; return 0; } ``` 输出结果为: ``` 3 1 2 4 5 ``` 在这个示例中,`vec.begin()`指向序列的第一个元素,`vec.begin() + 1`指向第二个元素,`vec.end()`指向序列的最后一个元素。`rotate`函数将第二个元素移动到序列的前面,其他元素依次向后移动。 需要注意的是,`rotate`函数会直接修改输入的序列,不会创建新的序列。如果需要保留原始序列不变,可以先使用`std::copy`函数将序列复制到一个临时容器,然后对临时容器进行旋转操作,最后再将旋转后的结果复制回原序列。