#include <string>
#include <vector>
#include <iostream>

int main()
{
    {
        // make a 3D vector of rank 3 x 4 x 5
        std::vector< std::string > vec(5) ; // vector of five strings
        std::vector< std::vector< std::string > > vec_2d( 4, vec ) ; // 4 x 5
        std::vector< std::vector< std::vector< std::string > > > vec_3d( 3, vec_2d ) ; // 3 x 4 x 5

        // print sizes
        std::cout << "vec 3d size:" << vec_3d.size() << '\n' ;
        for( const auto& v2 : vec_3d )
        {
            std::cout << "    vec 2d size:" << v2.size() << "  [ " ;
            for( const auto& v : v2 ) std::cout << "vec size:" << v.size() << "  " ;
            std::cout << "]\n" ;
        }
    }

    {
        // make a 3D vector of rank 5 X 4 X 3
        std::vector< std::vector< std::vector< std::string > > > vec_3d(5) ; // 5 x 0 x 0
        for( auto& v2 : vec_3d )
        {
            v2.resize(4) ; // 5 x 4 x 0
            for( auto& v : v2 ) v.resize(3) ; // 5 x 4 x 3
        }


        // print sizes
        std::cout << "\n\nvec 3d size:" << vec_3d.size() << '\n' ;
        for( const auto& v2 : vec_3d )
        {
            std::cout << "    vec 2d size:" << v2.size() << "  [ " ;
            for( const auto& v : v2 ) std::cout << "vec size:" << v.size() << "  " ;
            std::cout << "]\n" ;
        }
    }

}
