C++ N nested vectors at runtime

后端 未结 1 1970
清酒与你
清酒与你 2020-12-07 02:52

In C++ (with or without boost), how can I create an N dimensional vectors where N is determined at runtime?

Something along the lines of:

PROCEDURE b         


        
相关标签:
1条回答
  • 2020-12-07 03:32

    Unfortunately you will not be able to do this. A std::vector is a template type and as such it's type must be known at compile time. Since it's type is used to determine what dimensions it has you can only set that at compile time.

    The good news is you can make your own class that uses a single dimension vector as the data storage and then you can fake that it has extra dimensions using math. This does make it tricky to access the vector though. Since you will not know how many dimensions the vector has you need to have a way to index into the container with an arbitrary number of elements. What you could do is overload the function call operator operator with a std::intializer_list which would allow you to index into it with something like

    my_fancy_dynamic_dimension_vector({x,y,z,a,b,c});
    

    A real rough sketch of what you could have would be

    class dynmic_vector
    {
        std::vector<int> data;
        int multiply(std::initializer_list<int> dims)
        {
            int sum = 1;
            for (auto e : dims)
                sum *= e;
            return sum;
        }
    public:
        dynmic_vector(std::initializer_list<int> dims) : data(multiply(dims)) {}
        int & operator()(std::initializer_list<int> indexs)
        {
            // code here to translate the values in indexes into a 1d position
        }
    };
    

    Or better yet, just use a boost::multi_array

    0 讨论(0)
提交回复
热议问题