📅  最后修改于: 2023-12-03 15:29:50.996000             🧑  作者: Mango
C++ STL(Standard Template Library)是C++标准库中的一部分,提供了丰富的容器、算法和迭代器等组件,可以大大方便代码开发。
其中,std :: rotate和std :: rotate_copy是STL中的两种算法,它们都用于数组或者容器中的元素旋转操作。
std :: rotate的作用是将一个数组或者容器中的元素进行旋转操作,具体来说就是将某个元素移到数组或者容器的首位位置。
它的参数包括三个:
template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
例如,下面是一个使用std :: rotate进行旋转操作的示例代码:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec{ 1, 2, 3, 4, 5 };
std::rotate(vec.begin(), vec.begin() + 2, vec.end());
for(auto i : vec)
std::cout << i << ' ';
return 0;
}
这个示例代码中,通过std :: rotate函数将数组vec中的前两个元素旋转到了数组的末端,因此输出结果如下:
3 4 5 1 2
std :: rotate_copy函数则是将要旋转的元素拷贝到新的数组或者容器中,而不是直接进行原地旋转。
它的参数也包括三个:
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result);
例如,下面是一个使用std :: rotate_copy进行旋转操作的示例代码:
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec{ 1, 2, 3, 4, 5 };
std::vector<int> vec_out(5);
std::rotate_copy(vec.begin(), vec.begin() + 2, vec.end(), vec_out.begin());
for(auto i : vec_out)
std::cout << i << ' ';
return 0;
}
这个示例代码中,通过std :: rotate_copy函数将数组vec中的前两个元素旋转到了一个新的数组vec_out中,因此输出结果如下:
3 4 5 1 2
至此,我们通过简单的示例代码介绍了C++ STL中的std :: rotate与std :: rotate_copy函数,它们都是非常实用的数组或者容器中的元素旋转操作,能够大大提高代码的开发效率。