C++ C++;
程序中的以下函数搜索矩阵中的目标值,如果存在,则返回true;如果传递向量-C++ C++;,c++,vector,C++,Vector,程序中的以下函数搜索矩阵中的目标值,如果存在,则返回true;如果传递向量-([])或([[]),即传递空向量,则返回false,并给出错误 bool searchMatrix(vector<vector<int>>& matrix, int target) { int i = 0; int m = matrix[0].size(); int n = matrix.size();
([])
或([[])
,即传递空向量,则返回false,并给出错误
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int i = 0;
int m = matrix[0].size();
int n = matrix.size();
int j = m - 1;
if(n == 0 || m == 0)
return false;
if(target > matrix[n - 1][m - 1] || target < matrix[0][0])
return false;
while(j >= 0 && i < n){
if(matrix[i][j] == target)
return true;
if(matrix[i][j] > target)
j--;
else
i++;
}
return false;
}
如果我可以比较matrix.size()和matrix[0],我不明白为什么第一个代码会出现错误。size()与零为什么我不能先将其存储在变量m和n中,然后与零进行比较。在此表达式中:
if (matrix.size() == 0 || matrix[0].size() == 0)
如果矩阵
为空,则|
之前的第一个条件将计算为真
,并且由于短路,不会计算右侧
在代码中,您无条件地索引到矩阵[0]
。如果matrix
为空,则调用未定义的行为。如果matrix.size()
为零,则m=matrix[0].size()的初始化具有未定义的行为。这是在测试m
和n
之前出现的。
if (matrix.size() == 0 || matrix[0].size() == 0)