如何在C++中获取多维向量的维度
How to get dimensions of a multidimensional vector in C++
all
我正在使用多维 STL 向量将我的数据存储在C++中。我有一个3D矢量
vector<vector<vector<double>>> vec;
我想从中检索的是:
&vec[][1][]; // I need a pointer that points to a 2D matrix located at column 1 in vec
有人知道这样做吗?我将非常感谢任何帮助!
问候
长
最好vec
视为元素恰好是向量对向量双精度,而不是作为多维结构。
你可能知道,但以防万一你不知道,我会提到它,此数据类型不一定表示矩形长方体。 vec
只有当你确保所有的向量都是每个级别的大小相同。数据类型对向量vec[j]
非常满意与vec[k]
的尺寸不同,同样适用于vec[j][n]
成为与vec[j][m]
大小不同的向量,因此您的结构是"锯齿状的"。
所以你想得到一个vector<vector<double>>
指向位于索引 1 in vec
.您可以通过以下方式做到这一点:
vector<vector<double>> * pmatrix = &vec[1];
但是,此指针将是一种不必要的尴尬访问方式 vector<vector<double>>
.你肯定写不出喜欢:
double d = pmatrix[j][k];
并期望在"矩阵寻址"中的坐标 (j,k( 处获得double
由一个pmatrix
"。因为pmatrix
是指向双精度向量的指针;所以pmatrix[j]
指的是双精度向量(不是双精度向量(在索引 j
从 pmatrix
开始,其中索引以 sizeof(vector<vector<double>>)
.该声明将引用谁知道什么内存,很可能会使程序崩溃。
相反,您必须编写以下内容:
double d = (*pmatrix)[j][k];
其中(*pmatrix)
给你由pmatrix
寻址的向量双向量,或等效但更令人困惑:
double d = pmatrix[0][j][k];
更简单 - 因此,自然C++方式 - 是参考,而不是指针,指向索引 1 处的vector<vector<double>>
vec
.你只需通过以下方式做到这一点:
vector<vector<double>> & matrix = vec[1];
现在matrix
只是vec
中索引 1 处vector<vector<double>>
的另一个名称,您可以像预期的那样按矩阵处理它(始终假设您已经确保它是一个矩阵,而不是一个交错数组(。
manu343726在评论中提出了另一件需要考虑的事情。是吗希望接收此引用的代码能够 vec[1]
使用它来修改vec[1]
的内容 - 这将包括更改其大小或其中任何vector<double>
的大小?
如果您允许修改,那很好。如果你不这样做,那么你就想得到常量引用。您可以通过以下方式做到这一点:
vector<vector<double> > const & matrix = vec[1];
可能,您希望接收代码能够修改double
但不是包含它们的矢量的大小?在这种情况下,std::vector
是应用程序的错误容器类型。如果这是你的立场,我可以更新此答案以提供替代容器。
考虑使用来自某个线性代数库的矩阵。这里有一些方向
- 获取向量C++中第一个值和最后一个值的和
- 如何从用户那里获取输入并将其存储在向量中?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++获取传递给函数的向量的名称
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 如何从C++的对的排序向量中获取有关给定值的相应对
- push_back通过自行创建的对象获取最后一个元素的向量
- 从自定义类获取对象向量中的 max 元素
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 沿向量获取点
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 从向量获取值
- 通过函数参数从向量获取类指针
- C++:从向量<向量获取 T**<T>>
- 从 std::map 中的向量获取数据
- 从节点数组和边缘向量获取所有子树的最有效方法是什么
- C++在尝试编写对象读取器时,在尝试从一个向量获取数据时出错
- C++:向量获取意外数据
- 无法从另一个向量内的向量获取数据
- 如何从 unique_ptr 向量获取派生迭代器<Base>?