无法使用双指针反转数组

时间:2013-10-06 08:44:36

标签: c++ arrays pointers double reverse

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

以下是反向代码:

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然后endstart自然会发生变化。

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

以下是我在主要电话中的电话:

temp

2 个答案:

答案 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不用于指向最后一个元素的迭代器。