size() 在 std::vector<vector> 的 2D 向量中是什么意思<double>?

What does size() mean in a 2D vector of std::vector<vector<double>>?

本文关键字:vector lt gt 是什么 意思 double 向量 2D size std      更新时间:2023-10-16

如果我有一个这样的二维矢量:

#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