
On Jun 23, 2008, at 3:54 PM, David Abrahams wrote:
I haven't formed an opinion yet, but the fact remains that swapping a boost::array would have very different efficiency characteristics from swapping the analogous std::vector, so we ought to think it through carefully.
If it helps, here is a test program using gcc 4.0.1: #include <iostream> #include <vector> #include <tr1/array> #include <ctime> template <class T, std::size_t N> void swap1(std::tr1::array<T, N>& a, std::tr1::array<T, N>& b) { std::tr1::array<T, N> temp(a); a = b; b = temp; } template <class T, std::size_t N> void swap2(std::tr1::array<T, N>& a, std::tr1::array<T, N>& b) { std::swap_ranges(a.begin(), a.end(), b.begin()); } int main() { std::tr1::array<std::vector<int>, 1000> a; for (unsigned i = 0; i < a.size(); ++i) a[i] = std::vector<int>(10000); std::tr1::array<std::vector<int>, 1000> b(a); std::clock_t t1 = std::clock(); swap1(a, b); std::clock_t t2 = std::clock(); std::cout << "swap1 time is " << double(t2 - t1) / CLOCKS_PER_SEC << " seconds\n"; t1 = std::clock(); swap2(a, b); t2 = std::clock(); std::cout << "swap2 time is " << double(t2 - t1) / CLOCKS_PER_SEC << " seconds\n"; } On my machine: $ g++ -O3 test.cpp $ ./a.out swap1 time is 0.172796 seconds swap2 time is 1.3e-05 seconds I also note that swap1 can throw exceptions and swap2 can't. I also note that move semantics will greatly speed swap1, and make it nothrow, but I still expect swap1 with move semantics to be about twice as slow as swap2. -Howard