gpt4 book ai didi

c++ - 中途反转/交换

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:20 29 4
gpt4 key购买 nike

要反转整个 vector,存在 std::reverse。但我想将一个 vector “划分”为两部分(恰好在中间)并将两者反转,将它们放回一起并再次反转整个 vector 。例如我们有:

0 1 2 3 4 5 6 7

将它分成两部分并反转:

0 1 2 3 -> 3 2 1 04 5 6 7-> 7 6 5 4,将反转的部分放在一起 3 2 1 0 7 6 5 4 并再次反转:4 5 6 7 0 1 2 3

我尝试使用 reverse_copy 但这并不成功。这是我的代码片段:

std::vector<int>::iterator mid = nr.begin() + nr.size() / 2;
std::vector<int>::iterator midLast = nr.size() / 2 + nr.end();
vector<int> temp1, temp2;
std::reverse_copy(nr.begin(),mid, std::begin(temp1));
std::reverse_copy(midLast, nr.end(), std::begin(temp2));
std::reverse(temp1.begin(), temp2.end());

我该如何实现我的方法?谢谢!

最佳答案

std::reverse(nr.begin(), nr.begin() + nr.size() / 2 );
std::reverse(nr.begin() + nr.size() / 2 + ((nr.size() % 2) != 0 ? 1 : 0), nr.end());
std::reverse(nr.begin(), nr.end());

for (auto& it : nr)
{
std::cout << it << " ";
}

0、1、2、3、4、5、6、7、8的输出

5 6 7 8 4 0 1 2 3

0、1、2、3、4、5、6、7的输出

4 5 6 7 0 1 2 3

关于c++ - 中途反转/交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631205/

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