Мне просто интересно, зачем кому-то писать это:
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!
Есть ли какие-то важные различия / проблемы, которые я здесь пропускаю?
Из документов SGI (Вот):
[1] Строго говоря, iter_swap является избыточным. Он существует только по техническим причинам: в некоторых случаях некоторые компиляторы испытывают трудности с выполнением вывода типа, необходимого для интерпретации свопинга (* a, * b).
Чтобы ответить на ваш второй вопрос, using
+ swap
позволяет компилятору использовать пользовательские функции подкачки, которые могут быть более эффективными, чем реализация по умолчанию (с использованием ADL). Явное высказывание std::swap
запрещает ADL и любые пользовательские методы обмена, которые он, возможно, смог найти.
Что касается iter_swap
он предположительно используется в шаблонах и четко указывает намерение, а не обмен, который может указывать на то, что вы ожидаете указатель.