How can we swap 2 arrays in constant complexity or O(1)?

arrays, c++, pointers, stl, swap

Solution

Using `std::swap` (that uses member function swap) for vectors (`std::vector`) has a complexity of `O(1)`.

From the C++ Standard:

void swap(vector& x);

10 Effects: Exchanges the contents and capacity() of *this with that of x.

11 Complexity: Constant time.

You could "swap arrays" with a constant time if they were allocated dynamically with operator `new`. In this case, you indeed could swap only pointers that point to the first elements of the arrays.

For example:

#include <iostream>
#include <algorithm>

int main() {
    int **a = new int *[2];
    a[0] = new int[5] { 0, 1, 2, 3, 4 };
    a[1] = new int[5] { 5, 6, 7, 8, 9 };
    
    for ( size_t i = 0; i < 2; i++ ) {
        for ( size_t j = 0; j < 5; j++ ) {
            std::cout << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }
    
    std::cout << std::endl;
    
    std::swap( a[0], a[1] );    

    for ( size_t i = 0; i < 2; i++ ) {
        for ( size_t j = 0; j < 5; j++ ) {
            std::cout << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }
    
    std::cout << std::endl;
    
    delete [] a[0];
    delete [] a[1];
    delete [] a;
    
    return 0;
}

The output is:

0 1 2 3 4 
5 6 7 8 9 

5 6 7 8 9 
0 1 2 3 4 

In fact, the same operation is done in `std::vector`.

Problem

How can we swap 2 arrays in constant complexity or `O(1)`? Is there a way that we can do this? I have tried using pointers but it is giving an error Moreover, this won't help because it is just interchanging the pointers but not the arrays: ``` #include <algorithm> int AA[100], *A=AA, BB[100], *B=BB; swap(A, B); ``` I have tried using vectors assignment operator as well but they have LINEAR complexity i.e. `O(N)` not constant. So, is there any way we can swap two arrays in `O(1)`? (by using pointers or something else) I have tried searching on the internet and found a link to codeforces ( http://codeforces.com/blog/entry/11971 ) but this is not helping.

Original source