有效的方法来反转三个连续的子范围[A,B,C] - > [C,B,A]

Olu*_*ide -1 c++ stl stl-algorithm

我有一个由三个连续的子阵列A,B和C组成的数组[A,B,C].我想将较大的数组反转为[C,B,A].我目前的尝试涉及你的呼叫std::rotate,如下所示.我想知道是否有更简单/有效的方法来实现这一点,最好使用std算法.

Step 1: "swap" sub-array B,C
[A,B,C] -> [A|B,C] -> [A,C,B]

Step 2: "swap" sub-array A,C
[A,C,B] -> [A,C|B] -> [C,A,B]

Step 3: "swap" sub-array A,B
[C,A,B] -> [C|A,B] -> [C,B,A]
Run Code Online (Sandbox Code Playgroud)

编辑

例如,给定数组[1,2,3|4,5,6|7,8,9]我想"反转"它[7,8,9|4,5,6|1,2,3]

示例实施.请注意,"范围"的大小仅仅是说明性的.

Ale*_*nov 5

反转整个数组然后反转每个子数组.

[1,2,3|4,5,6|7,8,9]
[9,8,7|6,5,4|3,2,1]
[7,8,9|4,5,6|1,2,3]
Run Code Online (Sandbox Code Playgroud)

这将需要两个线性通道,并且非常适合CPU缓存.