我在学校作业中遇到一些问题,我们假设要创建自己的迭代器并使用它来反转数组中的元素。 如果它只是单个指针,我想我会管理它,但这是双指针和令人困惑的地狱......
以下是反向代码:
void reverse(T start, T end)
{
T temp = start;
while(start < end)
{
*temp = *start;
*start = *end;
*end = *temp;
++start;
--end;
}
}
这就是问题所在,因为当我将temp
指向start
时,temp
会获得start
的价值和地址。但是当我指出{时{1}}到start
然后end
和start
自然会发生变化。
我无法弄清楚如何解决这个问题......
以下是我在主要电话中的电话:
temp
答案 0 :(得分:0)
我解决了!
这个问题持续了两天,当我最终决定在这里发布时,我解决了它。
这是:
void reverse(T start, T end)
{
unsigned temp = *start;
while(start < end)
{
temp = *start;
*start = *end;
*end = temp;
++start;
--end;
}
}
我将临时无符号而不是T.但我不确定这是否适用于我们自己的对象,例如我们创建的球体等等......有人知道吗?
答案 1 :(得分:0)
而不是
*temp = *start;
*start = *end;
*end = temp;
使用
std::swap(*start, *end);
目前您的临时变量指向start
,因此您使用start
作为临时位置而不是。
另请注意,通常end
不用于指向最后一个元素的迭代器。