You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

检查vector所有元素相等时std::adjacent_find与std::equal的区别

两种判断vector内所有元素相等的实现差异

两种实现代码如下:

  • 第一种实现:
return std::adjacent_find(v.begin(), v.end(), std::not_equal_to<>()) == v.end();
  • 第二种实现:
return std::equal(v.begin() + 1, v.end(), v.begin());

核心差异说明

  • 空容器适配性:第二种实现未处理空vector场景,当容器为空时v.begin() + 1属于迭代器越界操作,会触发未定义行为,也就是你遇到的崩溃问题;第一种实现天然适配空容器,std::adjacent_find对空遍历区间会直接返回v.end(),符合「空容器内所有元素相等」的常规业务判断逻辑。
  • 逻辑等效性:非空场景下两种实现的逻辑完全等价,都是通过比对相邻元素是否相等来判断全容器元素一致性,没有返回结果差异。
  • 性能表现:两者时间复杂度均为O(n),仅需要单次遍历容器,底层操作开销几乎无差异,你观察到的运行速度基本相等是准确的。
  • 适用场景:如果你能确保调用时容器一定非空,第二种写法更简洁易读;如果需要兼容空容器场景,只需要给第二种实现加个前置判断即可:return v.empty() || std::equal(v.begin() + 1, v.end(), v.begin());,改造后和第一种实现的能力完全一致。

内容的提问来源于stack exchange,提问作者Det

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:30:01