我的结构定义如下:
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--;
}
}
如何实现所需格式?谢谢。
答案 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--;
}
}