我正在解决 Accelerate c++ 的练习题,即
实现我们在 §8.2.5/148 中使用的交换函数。为什么我们调用 swap 而不是直接交换 *beg 和 *end 的值?提示:试试看。
书中的实际功能是
template<class Bi> void reverse(Bi begin, Bi end) {
while (begin != end) {
--end;
if (begin != end)
swap(*begin++, *end);
} }
我变成了这个
template<class Bi,class X>
void reverse(Bi b, Bi e)
{
X tmp;
while (b!= e) {
--e;
if (b != e)
{
tmp=*b;
*b=*a;
*a=tmp;
--b;
}
}
}
它没有用,给出了以下错误。
没有匹配函数调用 reverse(std::vector::iterator,std::vector::iterator)'
比我变成这个
template<class Bi,class X>
void reverse(Bi b, Bi e,X c)
{
X tmp=c;
while (b!= e) {
--e;
if (b != e)
{
tmp=*b;
*b=*a;
*a=tmp;
--b;
}
}
}
并将上述函数称为
reverse(v.begin(),v.end(),0);
它起作用了,但我仍然不明白为什么第二个不起作用?