给定是一个通用的数组T [] arr。此阵列中的每个Quadrupel都应向左旋转,所以
“a b c d e f” - > “b c d a e f”
如果Arrays End不是完整的Quadrupel,则这些元素不应旋转。
我的想法是:
T[] arr2;
int x;
T temp0 = arr[x+0];
T temp1 = arr[x+1];
T temp2 = arr[x+2];
T temp3 = arr[x+3];
arr2[x+3] = temp0;
arr2[x+2] = temp3;
arr2[x+1] = temp2;
arr2[x+0] = temp1;
x += 1;
所以我正在切换第一个Quadrupel的Elements并将它们保存到第二个阵列。 但是我如何实现,一个不完整的Quadruple不会旋转,它会阻止数组的结束?
答案 0 :(得分:2)
你需要把你的代码放在一个循环中(你可能在你的问题中遗漏了) 请注意:
boost::context::continuation::resume()':
/usr/local/include/boost/context/continuation_fcontext.hpp:257:
undefined reference to
也可以防止越界异常,因为如果只剩下3个项目则无法检查Quadrupel。以下示例代码:
length-3
答案 1 :(得分:0)
使用arr.length
。在每个作业中,检查数组的长度是否小于您当前所处的值。
答案 2 :(得分:0)
执行以下操作来处理每个四边形。请注意,我的代码假设您正确定义了arr和arr2;
如果您希望将结果放入新数组arr2
for(int i = 3; i < arr.length; i += 4) // i is pointing at the end of each quadruple, so it will never show an incomplete one
{
arr2[i-3] = arr[i-2];
arr2[i-2] = arr[i-1];
arr2[i-1] = arr[i];
arr2[i] = arr[i-3];
}
int nbRemainingElements = arr.length % 4;
for(int i = 0; i < nbRemainingElements; ++i)
{
int index = arr.length - i - 1;
arr2[index] = arr[index];
}
如果您想在不安装其他阵列的情况下修改arr
for(int i = 3; i < arr.length; i += 4) // i is pointing at the end of each quadruple, so it will never show an incomplete one
{
T firstQuadElement = arr[i-3];
arr[i-3] = arr[i-2];
arr[i-2] = arr[i-1];
arr[i-1] = arr[i];
arr[i] = firstQuadElement;
}
顺便说一下,如果你想要两个不同的数组,那么解决方案也可以是使用array.copy
复制arr然后应用解决方案2