如果我有一个这样的二维矢量:
#include <vector>
typedef vector<vector<double>> Matrix;
Matrix A = {
{ 0, 2, 0, -2, 2.5},
{ 2, 0, 1, 0, 1.6},
{ 0, 1, 0, 1, 0},
{ -2, 0, 1, 0, 0},
{2.5, 1.6, 0, 0, 0}
};
如果A.size()
返回行,它是否将每个子向量计数为1行?为什么A[0].size()
表示列数?
这取决于您使用的库。如果您使用Boost uBLAS,您可以参考这里的文档。如果没有,您可以使用许多其他矩阵库。您可以在这里查看每个库的详细信息。
c++没有std::matrix
,但它支持多维数组以及向量中的向量。
例如,std::vector<std::vector>>
可以作为双矩阵,但是必须注意正确访问底层变量。从本质上讲,这个双层vector
只是一个向量内部的向量;因此,如果没有对operator[]
进行一些特殊的重载,那么双[x][y]
将无法工作。
对于vector内部的vector, A.size()
返回第1维的元素数量,A[0].size()
返回vector在第1维第0个索引处的元素数量。请注意,并不要求第一维向量内部的每个向量都具有均匀的长度。
创建一个可伸缩的x维矩阵是可能的,但它有点混乱,可能超出了这个问题的范围。
下面是一个如何在c++中创建"2d向量"的基本示例:
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::vector<int>> matrix;
for (int i = 0; i < 10; ++i) {
matrix.push_back(std::vector<int>());
for (int j = 0; j < 10; ++j) {
matrix[i].push_back(i*10 + j);
}
}
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
std::cout << matrix[i].at(j) << std::endl;
}
}
return 0;
}
3d-matrix的颜色:http://coliru.stacked-crooked.com/a/b949266621fb45fb
首先,您应该知道如何初始化矩阵。让我们将浮点数插入到矩阵中,如下所示。
Matrix A;
vector<double> a1, a2, a3, a4;
a1.push_back(0);
a1.push_back(2);
a1.push_back(0);
a1.push_back(-2);
a1.push_back(2.5);
a2.push_back(2);
a2.push_back(0);
a2.push_back(1);
a2.push_back(0);
a2.push_back(1.6);
a3.push_back(-2);
a3.push_back(0);
a3.push_back(1);
a3.push_back(0);
a3.push_back(0);
a4.push_back(2.5);
a4.push_back(1.6);
a4.push_back(0);
a4.push_back(0);
a4.push_back(0);
A.push_back(a1);
A.push_back(a2);
A.push_back(a3);
A.push_back(a4);
现在,4个向量(a1, a2, a3, a4)已经被插入到矩阵中。所以A.size()是4。a1.size()等于5。A[0] = a1,所以A[0].size() = 5