Какой смысл 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!

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

33

Решение

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

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

35

Другие решения

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

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

10

По вопросам рекламы [email protected]