首页 > 解决方案 > 如果 std::iter_swap 传递值,它如何调用 std::swap?

问题描述

我正在阅读一些函数的文档,并对它们的标准实现感兴趣。我读到了交换函数,这意味着它只有在两个变量作为引用传递时才会改变它们的值

template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}

没关系。我能够传递一些基本类型、类、结构等的变量。当然,如果一个类以某种方式实现了赋值运算符。

但是我陷入了困境:

template<class ForwardIt1, class ForwardIt2>
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
   std::swap(*a, *b);
}

在这里,这个函数传递的不是迭代器,而是它们的解引用值!因此,我假设交换接收特定值,例如 5 和 6,而不是一些变量。那么,我错在哪里了?

标签: c++stl

解决方案


推荐阅读