c++ - 中途反转/交换

标签 c++ algorithm vector reverse swap

要反转整个 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/

相关文章:

c++ - union 类型数据成员的初始化

c++ - Const 正确性和运算符 *

algorithm - 是否有快速算法来确定上下文无关语言术语的哥德尔数?

java - 最大化Java中的函数

c++ - 将一个 vector 拆分为 n 个子 vector (反弹)

c++ - 插入从函数返回的 std::vector

c# - 捕捉引擎ExecutionException

c++ - 带数组的嵌套结构

algorithm - 计算趋势主题或标签的最佳方法是什么?

c++ - 在 C++ 中使用 vector ?