c++ - 在声明时定义vector of vector of vector的大小

标签 c++ vector initialization size

最近我有机会使用 vector<vector<vector<Some_Struct>>> threeFoldVec , 我们不得不将其插入 list .尺寸threeFoldVec在初始化时已知。

我知道如何在声明时定义 2_fold vector 的大小。

std::vector<std::vector<SomeStruct>> Layer_1(10, std::vector<SomeStruct>(5));

但是当谈到 3_fold vector 时,我很困惑。

std::vector<std::vector<std::vector<SomeStruct>>> 
                       Layer_1(10, std::vector<std::vector<SomeStruct>>(10));

这样我就可以进入第二维度了。我显然可以遍历 Layer_1并使用 resizereserve根据需要,我有兴趣就地进行,只是因为我认为它很复杂很酷。

最佳答案

你可以这样做:

std::vector<std::vector<std::vector< SomeStruct >>> 
    Layer_1(10, std::vector<std::vector< SomeStruct >>(20, std::vector< SomeStruct >(30)));

这将创建一个 10 x 20 x 30 多维数组。请注意,使用嵌套 vector 的效率极低,最好使用 1D 平面 vector 并使用 3D 寻址方案,即对于大小为 HEIGHT x ROWS x COLS 的数组,您可以解决逻辑元素[i][j][k] as

[i][j][k] -> i * ROWS * COLS  + j * COLS + k

这将保证您的对象连续存储,因此您的访问时间会更好。

关于c++ - 在声明时定义vector of vector of vector的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30520673/

相关文章:

c++ - c++ 中的 find_first_of 给出不同的值

c++ - GCC 内联汇编 : constraints

c++ - pthread_create : Passing argument by value

c++ - 为什么 fill_n() 不适用于 vector.reserve()?

c++ - 有没有办法让基函数的派生实现访问基是友元的类?

c++ - 循环计数的有符号值与无符号值

c++ - 使用智能指针制作哈希表?

java - 在从类构造函数调用的方法中初始化最终变量

c - 使数组显示错误值的结构

c - 在初始化固定大小的 char 数组时没有足够的空终止符空间时没有编译器错误