I was just wondering, why would anybody write this:
std::iter_swap(i, k);
instead of this?
std::swap(*i, *k); // saved a
From the SGI docs (here):
[1] Strictly speaking, iter_swap is redundant. It exists only for technical reasons: in some circumstances, some compilers have difficulty performing the type deduction required to interpret swap(*a, *b).
To answer your second question, the using
+ swap
allows the compiler to use user-defined swap functions that may be more efficient than the default implementation (by using ADL). Explicitly saying std::swap
inhibits ADL and any custom swap methods it maybe have been able to find.
As for iter_swap
it's presumably there to use in templates and clearly indicate intention rather than a swap that might indicate you expect a pointer.