0

back() 関数が最後の要素への参照を返すことをどこでも読んだことがありますが、疑問があります。

要素1,3,5それぞれを持つベクトルを作成しました。次に、次のコードを書きました

int i = v.back();
i++;

上記の 2 つのステートメントの後、ベクトルを出力すると、出力 1 3 5 が得られましたが、参照をインクリメントすると 1 3 6 になるはずです。

しかし、 (v.back())++ を実行してからベクトルの値を出力すると、結果が得られます

1 3 6

output の違いがわかりません。私によれば、同じはずです。私が間違っている場合は修正してください。

4

3 に答える 3

8

このコードは、参照を介して最後の要素をインクリメントするのではなく、最後の要素のコピーをインクリメントします。への変更:

int& i = v.back();
i++;
于 2012-07-06T09:18:07.910 に答える
0

thisによると、 back() は参照を返します。アイテムを変更するには、次のように参照またはポインターに割り当てます。

int& iref = v.back();
int* iptr = &v.back();

これらの変数をさらに変更すると、ベクトル要素が変更されます。

于 2012-07-06T09:20:13.020 に答える
0
int i = v.back();
i++;

iこれは、ベクトル内の値ではなく、をインクリメントします。ベクトルの最後の要素をインクリメントする場合は、( を使用して(v.back())++)行ったように行うか、参照を使用します。

int& i = v.back();
i++;
// v.back is now +1
于 2012-07-06T09:18:21.303 に答える