运行时的 C++ N 嵌套 vector

标签 c++ arrays vector boost nested

在 C++ 中(有或没有 boost),我如何创建一个 N 维 vector ,其中 N 在运行时确定?

类似的东西:

PROCEDURE buildNVectors(int n)

std::vector < n dimensional std::vector > *structure = new std::vector< n dimensional std::vector >()

END

如果传递 1,将分配一个 vector 。如果传递 2,将分配一个 2d 嵌套矩阵。如果传递 3,则分配一个 3d 立方体。等

最佳答案

很遗憾,您将无法执行此操作。 std::vector 是一种模板类型,因此它的类型必须在编译时已知。由于它的类型用于确定它具有的维度,因此您只能在编译时设置它。

好消息是您可以创建自己的类,使用单维 vector 作为数据存储,然后您可以使用数学假装它具有额外的维度。但是,这确实使访问 vector 变得棘手。由于您不知道 vector 有多少维,因此您需要有一种方法来索引包含任意数量元素的容器。您可以做的是使用 std::intializer_list 重载函数调用运算符运算符,这将允许您使用类似

的内容对其进行索引
my_fancy_dynamic_dimension_vector({x,y,z,a,b,c});

你可能拥有的一个真实粗略的草图

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
    }
};

或者更好的是,只需使用 boost::multi_array

关于运行时的 C++ N 嵌套 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43358369/

相关文章:

arrays - 在 MATLAB 中将数组转换为字符串?

c++ - 错误 : passing ‘const Vector<int>’ as ‘this’ argument of . .. 丢弃限定符 [-fpermissive]

c++ - vector 中的结构成员是否在 C++ 中初始化为零?

c++ - SDL2 - 未检测到操纵杆?

c++ - 如何为 unsigned char 类型编译 boost::spirit ?

c++ - LuaBridge 回调(将 lua 函数传递给 c++)

c++ - 为什么 `std::enable_if` 需要默认值?

javascript - JS中带有对象的递归函数

c - 从数组读取时出现段错误

c++ - sizeof 如何知道数组的大小?