在c ++中反转结构数组

时间:2015-10-18 18:16:21

标签: c++

我的结构定义如下:

struct Rect {
int l;  
int b;  
int h; 
};

输入格式为:

10 20 30 40 50 60 12 2 3 
10 2  4  44 50 887 12 3 3

我已经成功实现了程序以接收输入并存储在Rect结构数组中。

现在我正在尝试实现一个函数来反转输入和输出,如下所示:

12 2 3 40 50 60 10 20 30
12 3 3 44 50 887 10 2 4 

我已经尝试实现我自己的反向功能并使用它但它没有用,下面是我的反向功能:

void reverseArray(Rect *arr, int start, int end)
{
    Rect *temp;
    while(start < end)
    {
        temp = &arr[start];
        arr[start] = arr[end];
        arr[end] = *temp;
        start++;
        end--;
    }
}

如何实现所需格式?谢谢。

3 个答案:

答案 0 :(得分:1)

我只想使用std::reverse

我建议使用std::vector而不是数组。

<强> Live code

Rect r1{1,2,3};
Rect r2{4,5,6};
Rect r3{7,8,9};
std::vector<Rect> v = {r1, r2, r3};
std::reverse(v.begin(),v.end());

Rect arr[3] = {{1,2,3}, {4,5,6}, {7,8,9}}; // works also with arrays
std::reverse(std::begin(arr),std::end(arr));

答案 1 :(得分:1)

关于std :: reverse的另一个答案是在正确的轨道上....但使用它的正确方法是:

Rect* pBegin = arr + start;
Rect* pEnd = arr + end;

std::reverse(pBegin, pEnd);

基本上,std :: reverse需要迭代器,指针是自然迭代器。

答案 2 :(得分:0)

Rect * temp是一个指针,这意味着您在临时值中保存了arr [start]的地址。不是结构的价值。所以当你说arr [start] = arr [end]时,arr [start]现在包含一个新值。但是因为temp只是指向内存中的那个位置* temp现在也等于新值。您需要将结构的副本复制到temp中,而不仅仅是保存指针。有点像:

void reverseArray(Rect arr, int start, int end)
{
    Rect temp;
    while(start < end)
    {
        temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}