📜  C++ STL中的std :: rotate与std :: rotate_copy(1)

📅  最后修改于: 2023-12-03 15:29:50.996000             🧑  作者: Mango

C++ STL中的std :: rotate与std :: rotate_copy

C++ STL(Standard Template Library)是C++标准库中的一部分,提供了丰富的容器、算法和迭代器等组件,可以大大方便代码开发。

其中,std :: rotate和std :: rotate_copy是STL中的两种算法,它们都用于数组或者容器中的元素旋转操作。

std :: rotate

std :: rotate的作用是将一个数组或者容器中的元素进行旋转操作,具体来说就是将某个元素移到数组或者容器的首位位置。

它的参数包括三个:

template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
  • first: 要旋转的容器的起始位置的迭代器;
  • middle: 要旋转的容器中的被旋转的元素的迭代器;
  • 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

std :: rotate_copy函数则是将要旋转的元素拷贝到新的数组或者容器中,而不是直接进行原地旋转。

它的参数也包括三个:

template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result);
  • first: 要旋转的容器的起始位置的迭代器;
  • middle: 要旋转的容器中的被旋转的元素的迭代器;
  • last: 要旋转的容器的结束位置的迭代器;
  • 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函数,它们都是非常实用的数组或者容器中的元素旋转操作,能够大大提高代码的开发效率。