是否有一个函数来交换c ++向量中的两个段?

Chu*_*Nan 3 c++ algorithm swap vector c++11

我知道std::swap可以在向量中交换两个元素,或者迭代交换两个具有相同长度的段.例如,我可以写一个循环来交换bcdefg在向量中abcdefgh,导致aefgbcdh.但我可以做交换bcdef(不同的长度)?或者是否有任何其他功能std::vector可以实现这一目标?

Ben*_*ley 6

如果段是相邻的,则可以使用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)