C++ 在C+中相互交换数组的部分+;
有没有一种简单的方法可以互相交换数组的部分(块)?也就是说,我有一个数组:C++ 在C+中相互交换数组的部分+;,c++,arrays,pointers,C++,Arrays,Pointers,有没有一种简单的方法可以互相交换数组的部分(块)?也就是说,我有一个数组: array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; array[5] = 6; array[6] = 7; array[7] = 8; 还有一个名为交换部分(startX,endX,startY,endY)的函数,它几乎给定了这些值,将endX-startX确定的值范围与startY到endY的值范围进行交换,因此从我的示例中 如果
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6;
array[6] = 7;
array[7] = 8;
还有一个名为交换部分(startX,endX,startY,endY)
的函数,它几乎给定了这些值,将endX-startX
确定的值范围与startY
到endY
的值范围进行交换,因此从我的示例中
如果x range=2
和startX=0
和y range=3
和startY=5
,它会将数组[0]和数组[1]放置在数组[5]和数组[6]所在的位置,然后将数组[7]放置在数组[6]之后,将其他所有内容向下推一个。我不知道该怎么做,我是在物理上将内存复制到一个临时数组中,但我认为有更好的方法可以做到这一点。(顺便说一句,我的例子的最终结果是):
您可能需要查看和它的切片。在示例中,您可以采用的一种方法是交换最小范围,然后“冒泡”最后一部分。因此:
array[0] = 1; --> 6
array[1] = 2; --> 7
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6; --> 1
array[6] = 7; --> 2
array[7] = 8;
然后将数组[7]与数组[6]交换,然后将数组[6]与数组[5]交换,以使8冒泡,等等,直到将8放入正确的位置。希望能让你开始。 < P>在可读性和努力方面交换数组的最简单的方法是使用标准的C++函数<代码> SavaPangReanges()< < /C> > /P>
#包括
#包括
…但它将只交换长度相等的子范围,而不会像测试用例中那样交换长度不等的子范围。您的案例实际上是swap_ranges()
和rotate()
的组合,假设您有(或可以创建)一个函数来反转一系列元素,比如反转(数组、开始、结束)
。然后,您可以分四个步骤执行此任务:
// (1) reverse the first range
array[0] = 2;
array[1] = 1;
// (2) reverse the elements between the ranges
array[2] = 5;
array[3] = 4;
array[4] = 3;
// (3) reverse the second range
array[5] = 8;
array[6] = 7;
array[7] = 6;
// (4) finally, reverse the entire array
array[0] = 6;
array[1] = 7;
array[2] = 8;
array[3] = 3;
array[4] = 4;
array[5] = 5;
array[6] = 1;
array[7] = 2;
扰流板:(先做作业,然后读这篇)
如果允许您使用标准库,则在
中有一个std::reverse
函数,使此功能变得简单
为什么不自己做作业,然后你就可以学点东西了?这就是问题所在。@Ed我试着做作业,但没有成功,所以我才发帖。@Nyan请发帖你到目前为止尝试过的内容。我必须使用int*array=new int[]代码>
#include <iostream>
#include <algorithm>
int main()
{
int a[8] = {1,2,3,4,5,6,7,8};
std::cout << "Beforeswap: ";
for(int i=0; i<8; ++i)
std::cout << a[i] << ' ';
std::cout << '\n';
std::swap_ranges(a+0, a+2, a+5);
std::cout << "After swap: ";
for(int i=0; i<8; ++i)
std::cout << a[i] << ' ';
std::cout << '\n';
}
// (1) reverse the first range
array[0] = 2;
array[1] = 1;
// (2) reverse the elements between the ranges
array[2] = 5;
array[3] = 4;
array[4] = 3;
// (3) reverse the second range
array[5] = 8;
array[6] = 7;
array[7] = 6;
// (4) finally, reverse the entire array
array[0] = 6;
array[1] = 7;
array[2] = 8;
array[3] = 3;
array[4] = 4;
array[5] = 5;
array[6] = 1;
array[7] = 2;