1

我在学校作业中遇到了一些问题,我们假设我们要创建自己的迭代器并使用它来反转数组中的元素。如果它只是单指针,我想我会管理它,但这是双指针并且令人困惑......

这是反向代码:

void reverse(T start, T end)
{
    T temp = start;
    while(start < end)
    {
        *temp = *start;
        *start = *end;
        *end = *temp;
        ++start;
        --end;
    }
}

这就是问题所在,因为当我指向tempstarttemp会得到start的值和地址。但是当我指向start良好endstart,ANDtemp自然会发生变化。

我一生都无法弄清楚如何解决这个问题......

这是我的主要调用:

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]<<" ";
}
4

2 回答 2

0

代替

*temp = *start;
*start = *end;
*end = temp;

利用

std::swap(*start, *end);

当前您的临时变量指向start,因此您start用作临时位置,但事实并非如此。

另请注意,通常end不用于指向最后一个元素的迭代器。

于 2013-10-06T10:40:11.053 回答
0

我解决了!

这个问题坐了两天,当我最终决定在这里发布它时,我解决了它。

这是如何:

void reverse(T start, T end)
{
    unsigned temp = *start;
    while(start < end)
    {
        temp = *start;
        *start = *end;
        *end = temp;
        ++start;
        --end;
    }
}

我将 temp 设为 unsigned 而不是 T。但我不确定这是否适用于我们自己的对象,例如我们创建的球体等等……有人知道吗?

于 2013-10-06T09:06:25.617 回答