使用多维向量或数组
Working with multidimensional vectors or arrays
我很难找到表示这一点的最佳方式。
最初,我有一个大小为N x N的2D向量,其中每个元素都是glm::vec2。我这样初始化它:
//initialize vector
std::vector < std::vector < glm::vec2>> Gvectors;
//allocate space
Gvectors.resize(nGridCells + 1, std::vector<glm::vec2>(nGridCells + 1, glm::vec2(0.0f)));
//fill data
for (size_t i = 0; i < nGridCells+1; i++)
{
for (size_t j = 0; j < nGridCells+1; j++)
{
float dx = something;
float dx = something else;
Gvector[i][j] = glm::normalize( glm::vec2(dx, dy));
}
}
不,我想要这些2D矢量中的多个,大小都不一样。它们中的每一个都有不同的尺寸,通常在10x10到100x100的范围内。
所以我想做另一个嵌套的向量,所以它会像:
std::vector<std::vector <std::vector < std::vector < glm::vec2>>> Gvectors;
但是,当我试图找出如何使用三重向量的resize来分配空间时,我读到嵌套向量可能会给内存分配带来麻烦,而且通常使用标准数组会更好。但如果我使用数组,我想我会遇到问题,因为我的每个2D数组都有不同的大小。
我想我在问什么,最好的表达方式是什么。基本上是2D矢量的矢量或2D阵列的阵列。我也试图制作一个二维矢量阵列,但我想这不是最好的方法
仅供参考,初始化后矢量的大小不会改变。
提前感谢!
一般来说,命名事物是个好主意。
假设你把你的2D矢量称为矩阵,那么
std::vector<Matrix> matrices;
是一种合理的方式来表示矩阵的数量、大小和内容可以在运行时发生变化。
另一方面,如果您想表示该信息在初始化后的运行时不会发生变化,那么使用const
并添加一个初始化器,如
std::vector<Matrix> const matrices = something;
如何定义像Matrix
这样的类肯定会有很多SO问题,但简单的搜索并没有找到它。它确实应该在SO C++数组FAQ中,但在那里回答它需要讨论无数细节。总之,最合理的方法是IMO
使用
std::vector
进行存储,并跟踪矩阵大小定义一个非公共成员函数
index_of
,它为给定的行/列位置提供线性数组索引,以及为访问提供公共成员功能,如
item
、at
、operator()
。
相反,如果您选择定义一个operator[]
进行访问,并让它返回一个指针,那么您就不需要index_of
,它可以更高效,但您将失去对列索引进行范围检查的能力,也将失去在列索引上设置断点的一般能力。因此,这是一个不太通用、可重复使用性较差的解决方案。尽管如此,它仍然是一种选择,你可以两者兼得。
- 将数组/向量发送到 c++ 脚本的 cython 示例
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 将指向多维数组向量中的单个项的指针传递给函数 c++
- 数组向量的文件 I/O
- 在一行中初始化和引入数组向量的正确方法?
- C++ 返回具有最小硬币的数组/向量以获得价值动态规划
- 将整数向量转换为字节数组向量,然后调用每个字节数组
- 我可以在不循环访问数组/向量的情况下检查数组/向量中的单词吗?
- (C )创建可以从功能访问的动态全局数组/向量
- 提升是否具有用于数组向量的智能指针
- 将函数应用于数组向量的元素
- 数组向量的内存布局是什么
- 获取数组/向量末尾地址的未定义行为
- "Empty"数组\向量成员 C++
- 将字符串向量转换为双2-D数组向量
- 排序多维数组/向量
- 如何创建模板化对象的数组/向量
- 如何在数组向量上使用 std::find
- 无法删除C++中的数组/向量
- 具有元素自定义构造函数的对象数组/向量