如果我有一个这样的2D矢量:
#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()
表示列数?
答案 0 :(得分:1)
答案 1 :(得分:0)
首先,您应该知道Matrix的初始化方式。 让我们将浮点数插入Matrix中,如下所示。
.
现在,已将4个向量(a1,a2,a3,a4)插入矩阵。所以A.size()是4。 a1.size()为5. A [0]为a1,因此A [0] .size()为5。
答案 2 :(得分:0)
C ++没有std::matrix
,但它确实支持多维数组以及向量内的向量。
例如std::vector<std::vector>>
可以充当双矩阵,但必须注意正确访问底层变量。在本质上,这个双层vector
仅仅是一个向量内部的向量;因此,如果没有[x][y]
的一些特殊重载,那么做一个多臂operator[]
将无法工作。
对于向量内部的向量,A.size()
将返回第一维中的元素数量,A[0].size()
将返回第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;
}
Coliru for 3d-matrix:http://coliru.stacked-crooked.com/a/b949266621fb45fb