Я читал документацию по некоторым функциям и интересовался их стандартной реализацией. Я читал о функции подкачки, которая подразумевает, что она изменяет значения двух переменных, только если они передаются как ссылки
template <class T> void swap ( T& a, T& b )
{
T c(a); a=b; b=c;
}
Это нормально. Я могу передать некоторые переменные, которые являются c типами, классами, структурами и т. Д. c. Конечно, если класс каким-то образом реализует оператор присваивания.
Однако я застрял на этом:
template<class ForwardIt1, class ForwardIt2>
void iter_swap(ForwardIt1 a, ForwardIt2 b)
{
std::swap(*a, *b);
}
Здесь эта функция передает не итераторы, а их разыменованные значения! Итак, я бы предположил, что своп получает конкретные значения, например, 5 и 6 вместо некоторых переменных. Итак, где я ошибся?