|
Boost : |
From: Niels Dekker - mail address until 2008-12-31 (nd_mail_address_valid_until_2008-12-31_at_[hidden])
Date: 2008-06-25 05:13:03
> Howard Hinnant wrote:
> swap1 time is 0.172796 seconds
> swap2 time is 1.3e-05 seconds
David Abrahams wrote:
> Your program gives about the results I'd have expected for the case
> you tested, but it doesn't address what I was concerned about.
Howard's example shows that a swap overload for std::tr1::array
effectively reduces the complexity of swapping a
tr1::array<vector<int>,N> from O(M*N) to O(N), when the array has N
vectors, each having size M. And it provides no-throw. Aren't those
the issues you were concerned about?
Any type that is both CopyConstructible and Assignable is Swappable, by
definition. Within generic code, people typically use the well-known
idiom to swap a pair of Swappable objects:
// Allow argument-dependent lookup to find a custom swap.
using std::swap;
swap(lhs, rhs);
As long as boost::swap hasn't come out of the sandbox, of course
(hint)! Don't you think it /always/ makes sense to provide a custom
swap overload for a Swappable type, as long as it outperforms the
default std::swap, in one way or the other?
Kind regards, Niels
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk