matrix.size() == 0 和 matrix[0].size() == 0 有什么区别

what is different between matrix.size() == 0 and matrix[0].size() == 0

本文关键字:size matrix 什么 区别      更新时间:2023-10-16

对于向量>矩阵。matrix.size() == 0 和 matrix[0].size() == 0 之间有什么区别?

 bool searchMatrix(vector<vector<int> > &matrix, int target) {
    int n = matrix.size();
    if (n == 0) {
        return false;
    }
    int m = matrix[0].size();
    if (m == 0) {
        return false;
    }

matrix.size() 返回矩阵中有多少个 int 向量;matrix[0].size() 返回向量矩阵 [0] 中有多少 int

matrix是一个vector<vector<int> >,或向量的向量。如果它是空的,则其中没有向量。

matrix[0]matrix内的第一个向量。这是一个<vector<int>.如果存在,matrix 并不是真正的空,因为它包含一个元素。但如果它是空的,则matrix内部没有有用的数据。

  • 矩阵大小() = 矩阵向量的大小
  • 矩阵[0].size() = 矩阵向量的第一个元素的大小。假设矩阵为空,那么这将为您提供分割错误未定义的行为

此代码使用向量向量模拟矩阵。它们将两个向量用于列数和行数。可以使用这样的向量,但 IMO 不是一个好主意,因为没有什么能阻止您在内部拥有不同大小的向量。想象:

vector<vector<int>> matrix;
vector<int> row;
row.push_back(1);
matrix.push_back(row);
row.push_back(2);
row.push_back(3);
matrix.push_back(row);
cout << "matrix.size() = " << matrix.size() << endl;
cout << "matrix[0].size() = " << matrix[0].size() << endl;
cout << "matrix[1].size() = " << matrix[1].size() << endl;
cout << "matrix[2].size() = " << matrix[2].size() << endl;

这给出了:

matrix.size() = 2
matrix[0].size() = 1
matrix[1].size() = 3
matrix[2].size() = 25802

一些评论:

  • 如您所见;矩阵包含两个向量(因为我们使用了两次matrix.push_back()
  • matrix[0] 包含一个元素,因为我们在将这个子向量放入矩阵之前只做了一次row.push_back(1);
  • 没有什么能强加 matrix[0].size() 和 matrix[1].size() 具有相同的维度
  • 访问从未填充的 matrix[2].size() 会给出未定义的行为