size()在std :: vector <vector <double>&gt;的2D向量中的含义是什么?

时间:2015-05-20 05:06:37

标签: c++ vector

如果我有一个这样的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()表示列数?

3 个答案:

答案 0 :(得分:1)

这取决于您使用的库。如果您使用Boost uBLAS,则可以参考文档here。如果没有,您可以使用许多其他矩阵库。您可以查看here以获取每个库的更多详细信息。

答案 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