I was just wondering, why would anybody write this:
std::iter_swap(i, k); instead of this?
std::swap(*i, *k); // saved a few keystrokes! Then I looked into the implementation of iter_swap, and of course it only uses swap instead of std::swap since we're already in namespace std, anyway. That leads me to the next question:
Why would anybody write this:
using std::swap; swap(a, b); instead of this?
std::iter_swap(&a, &b); // saved an entire line of code! Are there any important differences/issues I am overlooking here?
The function std::swap() is a built-in function in the C++ Standard Template Library (STL) which swaps the value of two variables.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With