Как std :: iter_swap вызывает std :: swap, если передает значения? - PullRequest
1 голос
/ 21 марта 2020

Я читал документацию по некоторым функциям и интересовался их стандартной реализацией. Я читал о функции подкачки, которая подразумевает, что она изменяет значения двух переменных, только если они передаются как ссылки

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 вместо некоторых переменных. Итак, где я ошибся?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...