如果段是相邻的,则可以使用std::rotate.例如:
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Run Code Online (Sandbox Code Playgroud)
比方说,我希望交换的{ 1, 2, 3 }用{ 4, 5, 6, 7 }.我可以做这个:
std::rotate(v.begin() + 1, v.begin() + 4, v.begin() + 8);
Run Code Online (Sandbox Code Playgroud)
如果段不相邻,则可以使用rotate两次,但它可能比严格必要的工作更多.例如,为了交换{ 1, 2 }与{ 4, 5, 6, 7 }
std::rotate(v.begin() + 1, v.begin() + 4, v.begin() + 8);
std::rotate(v.begin() + 5, v.begin() + 7, v.begin() + 8);
Run Code Online (Sandbox Code Playgroud)