[英]Can't reverse an array with double pointer
我在学校作业中遇到了一些问题,我们应该创建自己的迭代器并使用它来反转数组中的元素。 如果只是单指针,我想我会管理的,但这是双指针,令人困惑……
这是反向代码:
void reverse(T start, T end)
{
T temp = start;
while(start < end)
{
*temp = *start;
*start = *end;
*end = *temp;
++start;
--end;
}
}
这里的问题是,因为当我点temp
,以start
, temp
得到start
的价值和地址。但是,当我点start
到end
以及随后start
和temp
的变化自然。
我一生都无法解决该问题。
这是我在主体中拨打的电话:
int a[5] = {5, 12, 1, 6, 9};
Itterfunctions<int*> itt;
int *b = a;
itt.reverse(b, b+4);
for (int i = 0; i < 5; i++)
{
cout<<a[i]<<" ";
}
我解决了!
坐在这个问题上了两天,当我最终决定在这里发布时,我解决了。
这是这样的:
void reverse(T start, T end)
{
unsigned temp = *start;
while(start < end)
{
temp = *start;
*start = *end;
*end = temp;
++start;
--end;
}
}
我将温度设为无符号而不是T。但是不确定是否适用于我们自己的对象(例如我们创建的球体等)……有人知道吗?
代替
*temp = *start;
*start = *end;
*end = temp;
采用
std::swap(*start, *end);
当前,您的临时变量指向start
,因此您将start
位置用作临时位置,但不是。
还要注意,通常end
不用于指向最后一个元素的迭代器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.