当前位置: 首页 > web >正文

二维数组判断空的情况

在C++中,matrix.empty() || matrix[0].empty() 用于判断二维向量matrix是否为空或其首行是否为空,这是处理二维数组/向量时常见的边界条件检查。以下是对这两个条件的详细分析和区别:

一、matrix.empty()

作用

判断二维向量matrix是否为空(即没有任何行)。

  • matrix是空向量时,matrix.size() == 0,此时访问matrix[0]会导致越界错误(未定义行为)。
示例
vector<vector<int>> matrix; // 空二维向量
if (matrix.empty()) {cout << "矩阵为空,没有任何行"; // 会执行
}

二、matrix[0].empty()

作用

判断二维向量matrix首行是否为空(即首行没有任何元素)。

  • 前提:必须确保matrix非空(即matrix.size() > 0),否则访问matrix[0]会导致越界。
示例
vector<vector<int>> matrix = {{}}; // 包含一个空行的二维向量
if (!matrix.empty() && matrix[0].empty()) {cout << "首行是空行"; // 会执行
}

三、组合使用的原因

在LeetCode 240题的代码中,matrix.empty() || matrix[0].empty() 用于处理以下两种无效情况:

  1. 矩阵整体为空matrix.empty()为真):
    例如:matrix = {}(空向量)。
  2. 矩阵非空但首行空matrix[0].empty()为真):
    例如:matrix = {{}, {1,2}}(首行是空向量)。
代码逻辑
if (matrix.empty() || matrix[0].empty()) return false;
  • 若矩阵整体为空,直接返回false(无元素可搜索)。
  • 若矩阵非空但首行空,说明矩阵结构无效(行有元素但列数为0),同样无法搜索,返回false

四、常见错误场景

1. 遗漏matrix.empty()检查
if (matrix[0].empty()) return false; // 错误!可能访问空矩阵的matrix[0]
  • matrix为空时,matrix[0]会触发越界,导致程序崩溃。
2. 错误理解二维矩阵结构

二维矩阵的有效条件是:

  • 行数 m = matrix.size() > 0
  • 列数 n = matrix[0].size() > 0(假设所有行的列数相同,LeetCode题目通常保证这一点)。
    matrix.empty() || matrix[0].empty() 确保至少有一个非空行存在。

五、与其他边界条件的对比

条件表达式含义描述
matrix.empty()矩阵无任何行(空矩阵)
matrix[0].empty()矩阵首行无元素(首行是空行)
matrix.size() == 0等价于matrix.empty()
matrix[0].size() == 0等价于matrix[0].empty()

总结

matrix.empty() || matrix[0].empty() 是二维向量/矩阵的常见合法性检查,用于确保:

  1. 矩阵至少有一行(非空)。
  2. 首行至少有一个元素(非空行)。

这两个条件组合使用可以避免访问空指针或越界,是处理二维数据结构时的必要安全措施。在LeetCode题目中,若题目明确保证矩阵非空且每行非空,该检查可省略;但为了代码的鲁棒性,通常建议保留。

http://www.xdnf.cn/news/13386.html

相关文章:

  • uniapp自定义导航栏,采用粘性定位
  • STM32 PID控制
  • python打卡训练营打卡记录day50
  • 林清轩以研发为核,用专利技术筑就高端国货护肤壁垒
  • 函数02 day11
  • AI赋能农业
  • 第十六章 I2C
  • 【PhysUnits】17.6 Unit基础结构(unit.rs)
  • <component :is=““>
  • CentOS7下的ZooKeeper部署
  • 55. Jump Game
  • Redis持久化策略介绍,以及如何选择?
  • 第二十四章 通用同步异步收发器(USART)
  • java异步编程难题拆解
  • Java 中 switch-case 语句的执行逻辑与避坑指南
  • Java判断规则工具类
  • 工作日记总结-transaction is aborted, commands ignored until end of transaction block
  • [软件测试]:什么是自动化测试?selenium+webdriver-manager的安装,实现你的第一个脚本
  • Kotlin基础语法二
  • 大数据学习(136)-数据埋点
  • 玄机 日志分析-Tomcat日志分析 WriteUp
  • G-Star公益行 | 公益组织入门开源技术,六月北京点燃改变的星火
  • 【MySQL数据库】InnoDB存储引擎:事务原理redolog、undolog与版本控制MVCC
  • QuecPython 文件系统操作
  • 多光谱图像技术在苗期作物与杂草识别中的研究进展
  • C语言学习20250610
  • Dynadot邮箱工具指南(六):将域名邮箱添加至网易邮箱大师
  • Leetcode 3576. Transform Array to All Equal Elements
  • 新能源知识库(34)什么是单一制和两部制
  • 【SAP MM SD FICO】销售视图和会计视图