イテレータ begin と end で示されるコンテナの値を逆にする関数を微調整しています。
なぜこれが機能するのですか:
template<class Bi> void reverse(Bi begin, Bi end){
while (begin!= end) {
--end;
if (begin != end)
swap(*begin++, *end);
}
}
しかし、これではありませんか?
template<class Bi> void reverse(Bi begin, Bi end){
while (begin != end) {
--end;
if (begin != end){
Bi temp = begin;
Bi temp2 = end;
*begin = *temp2;
*end = *temp;
begin++;
}
}
}
これは問題なくコンパイルされますが、互いに等しいイテレータを割り当てることについて何か誤解しているに違いありません。たとえば、値 1 ~ 5 のベクトルを逆にすると、最初のベクトルが 5 ~ 1 になるためです。 2 番目の値は 5、4、3、4、5 になります。この動作がわかりません。何が問題なのですか?