#include<iostream>

template < class T > class Vector {
public:
    T * array;
    int arr_size, capacity;
   
    Vector( int n_size = 0 )
        : arr_size( n_size )
    {
        array = new T[ arr_size ];
    }
   
    size_t size() {
        return arr_size;
    }
   
    T & push_back( const T & t ) {
        if( arr_size > capacity )
             resize();
       
        array[ arr_size ] = t;
        arr_size++;
    }
   
    void resize() {
        T * backup = new T[ arr_size ];
        backup = array;
        delete[] array;
        array = new T[ arr_size ];
        array = backup;
        capacity = arr_size;
    }
   
    T & operator []( int i ) {
        return array[ i ];
    }
    const T & operator []( int i ) const {
        return array[ i ];
    }
};

int main() {
    Vector < int > tablica;
    for( int i = 0; i < 20; i++ ) {
        tablica.push_back( i );
    }
    for( size_t i = 0; i < tablica.size(); i++ ) {
        std::cout << tablica[ i ] << " ";
    }
   
}