在声明时定义vector的vector的vector的vector的vector的大小
Define size of vector of vector of vector at the time of declaration
最近我有机会使用vector<vector<vector<Some_Struct>>> threeFoldVec
,我们必须把它推进list
。threeFoldVec
的大小在初始化时是已知的
我知道如何在声明时定义2_fold向量的大小。
std::vector<std::vector<SomeStruct>> Layer_1(10, std::vector<SomeStruct>(5));
但是当涉及到3_fold向量时,我很困惑。
std::vector<std::vector<std::vector<SomeStruct>>>
Layer_1(10, std::vector<std::vector<SomeStruct>>(10));
这样就可以到第二次元了。我显然可以通过Layer_1
循环并根据需要使用resize
或reserve
,我有兴趣在原地做它,只是因为我认为它很复杂-很酷。
你可以这样做:
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
多维数组。注意,使用嵌套向量效率极低,最好使用一维平面向量和3D寻址方案,即对于大小为HEIGHT x ROWS x COLS
的数组,将逻辑元素[i][j][k]
寻址为
[i][j][k] -> i * ROWS * COLS + j * COLS + k
这将保证您的对象是连续存储的,因此您的访问时间将会更好。
相关文章:
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 为 std::vector 编写自定义插入函数
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 将结构 std::memcpy 转换为具有足够容量的 std::vector 是未定义的行为<char>吗?
- 如何将自定义特征张量类存储到 std::vector 中?
- C++ std::vector 中的外部类(定义格式不正确)
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- 从函数为 std::vector 创建自定义扩展
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- 如何将带有自定义分配器的 std::vector 传递给期望带有 std::分配器的函数?
- 为什么 std::vector 适用于类定义中的不完整类型?
- 如何在用户定义类型的向量上使用 vector::p ush_back() 来仅修改一个对象?
- 函数:'find'未为 std::vector 定义
- “无法将函数定义与现有声明匹配”,当包装在 std::vector 中时
- 不调用带有 std::vector 的自定义分配器
- 什么时候会有人将std::vector定义为thread_local
- 使用mpl::vector定义boost::变体类型