我正在调整一个函数,它反转由迭代器开始和结束表示的容器的值。
为什么会这样:
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,但是第二个产生值 5、4、3、4、5。我不明白这种行为,这里有什么问题?