繁体   English   中英

无法使用双指针反转数组

[英]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 ,以starttemp得到start的价值和地址。但是,当我点startend以及随后starttemp的变化自然。

我一生都无法解决该问题。

这是我在主体中拨打的电话:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM