1

独自のイテレータを作成し、それを使用して配列内の要素を逆にすることになっている学校の課題に問題があります。それが単一のポインターだけだったら、私はそれを管理すると思いますが、これは二重ポインターであり、地獄のように混乱しています...

逆コードは次のとおりです。

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とANDは自然に変化します。endstarttemp

私はこれを修正する方法を私の人生で理解することはできません....

メインで行う呼び出しは次のとおりです。

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

解決しました!

この問題を 2 日間抱えていて、最終的にここに投稿することにしたとき、解決しました。

こうやって:

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

T の代わりに temp を unsigned にしました。しかし、これが作成した球などの独自のオブジェクトで機能するかどうかはわかりません...誰か知っていますか?

于 2013-10-06T09:06:25.617 に答える