gpt4 book ai didi

c++ - 是否有交换 C++ vector 中的两个段的函数?

转载 作者:太空狗 更新时间:2023-10-29 19:52:23 26 4
gpt4 key购买 nike

我知道 std::swap 可以交换 vector 中的两个元素,或者迭代交换两个长度相同的段。例如,我可以编写一个循环来交换 vector abcdefgh 中的 bcdefg,从而得到 aefgbcdh。但是我可以交换 bcdef (不同的长度)吗?或者 std::vector 中是否有任何其他函数可以实现此目的?

最佳答案

如果段相邻,可以使用std::rotate .例如:

std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

假设我想将 { 1, 2, 3 } { 4, 5, 6, 7 } 交换。我可以这样做:

std::rotate(v.begin() + 1, v.begin() + 4, v.begin() + 8);

如果线段不相邻,您可以使用两次 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);

关于c++ - 是否有交换 C++ vector 中的两个段的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com