matrix.size()和matrix [0] .size()之间有什么不同

时间:2017-04-14 03:32:33

标签: c++ vector

在下面的代码中,确切地说是matrix.size()matrix[0].size()之间的区别?

int matrixElementsSum(std::vector<std::vector<int>> m) {
    int s = 0;
    for (int j = 0; j < m[0].size(); j++) {
        for (int i = 0; i < m.size(); i++) {
            if (m[i][j] == 0) {
                break;
            }
            s += m[i][j];
        }
    }
    return s;
}

2 个答案:

答案 0 :(得分:2)

说你有:

std::vector<std::vector<int>> m(10, std::vector(20);

m.size()将为10,std::vector<int>m的数量 m[0].size()将为int中的数字m[0]为20。

将其与2D数组进行比较,如果您有:

int m[10][20];

sizeof(m)/sizeof(m[0])将为10,m中的行数 sizeof(m[0])/sizeof(m[0][0])将为20,m[0]中的列数。

答案 1 :(得分:1)

确切含义如下。 C ++中没有真正的2d向量,但std::vector<T>包含std::vector<T>

如果声明向量std::vector<int> vec(10),则会有一个包含10个元素的向量。所以vec.size()是10.

如果声明std::vector<std::vector<int>> vec(10, std::vector<int>(10)),您有一个包含10个元素的向量,每个元素包含一个包含10个元素的向量。因此vec[0]的类型为std::vector<int>

如果您想知道此向量(含义vec[0])包含多少元素,您可以轻松地执行vec[0].size()

如果你想要元素的总数,你必须计算vec中包含多少向量乘以每个向量包含的元素数。因此vec.size()*vec[0].size()

让我们得出结论:

我们有std::vector<std::vector<int>> vec(10,std::vector<int>(10))

  • 行数(std::vector<int>中包含vec的数量):vec.size()
  • 列数(每个std::vector<int>中包含的元素数量):vec[0].size()
  • 元素总数:vec.size()*vec[0].size()