Подтвердить что ты не робот

Какой смысл iter_swap?

Мне просто интересно, почему кто-нибудь напишет это:

std::iter_swap(i, k);

вместо этого?

std::swap(*i, *k);   // saved a few keystrokes!

Затем я рассмотрел реализацию iter_swap, и, конечно, он использует swap вместо std::swap, так как мы уже находимся в namespace std. Это приводит меня к следующему вопросу:

Почему кто-нибудь напишет следующее:

using std::swap;
swap(a, b);

вместо этого?

std::iter_swap(&a, &b);   // saved an entire line of code!

Существуют ли какие-либо важные различия/проблемы, которые я здесь просматриваю?

4b9b3361

Ответ 1

Из документов SGI (здесь):

[1] Строго говоря, iter_swap избыточен. Он существует только по техническим причинам: в некоторых случаях некоторые компиляторы с трудом выполняют вывод типа, необходимый для интерпретации swap (* a, * b).

Ответ 2

Чтобы ответить на ваш второй вопрос, using + swap позволяет компилятору использовать пользовательские функции свопинга, которые могут быть более эффективными, чем реализация по умолчанию (с помощью ADL). Явно говоря, std::swap блокирует ADL и любые пользовательские методы подкачки, которые он, возможно, смог найти.

Что касается iter_swap, то он предположительно там используется в шаблонах и четко указывает на намерение, а не на своп, который может указывать на то, что вы ожидаете указателя.