矢量旋转最后的内容到开头

Vla*_*adp 1 c++ algorithm vector

我有一个带元素的向量,我想要旋转它们,基本上我想采用最后的x个元素并将其推送到向量的开头:

1 2 3 4 5 6 7 8 9 
4 5 6 7 8 9 1 2 3 
Run Code Online (Sandbox Code Playgroud)

这是我目前的实施:

#include <iostream>
#include <vector>

int main()
{
    int size = 9;
    std::vector<int> vec(size);
    for(int i = 0; i < size; i++)
    {
        vec[i] = i + 1;
    }
    for(int i = 0; i < size; i++)
    {
        std::cout << vec[i] << ' ';
    }
    std::cout << std::endl;

    int spinCount = 6;
    for(int i = 0; i < spinCount; i++)
    {
        int last = vec[size - 1];
        for(int j = size - 1; j > 0; j--)
        {
            int num = vec[j - 1];
            vec[j] = num;
        }
        vec[0] = last;
    }
    for(int i = 0; i < size; i++)
    {
        std::cout << vec[i] << ' ';
    }
    std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但它在循环内部有一个循环,使其成为方形复杂性.有没有办法让它更有效率?

Yak*_*ont 5

std::rotate( begin(vec), begin(vec)+3, end(vec) );
Run Code Online (Sandbox Code Playgroud)

旋转vec3个点,使前3个元素现在结束.