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)
但它在循环内部有一个循环,使其成为方形复杂性.有没有办法让它更有效率?
std::rotate( begin(vec), begin(vec)+3, end(vec) );
Run Code Online (Sandbox Code Playgroud)
旋转vec3个点,使前3个元素现在结束.