Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中相互交换数组的部分+;_C++_Arrays_Pointers - Fatal编程技术网

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;