搜索两个连续相同元素的范围[
first
,last
)。返回值
第一个相同元素对中第一个的迭代器,即第一个迭代器
it
,使得第一个版本的*it == *(it+1)
或第二个版本的p(*it, *(it + 1)) != false
。 / p>如果未找到此类元素,则返回last
但是,尚不清楚应该如何处理范围{last
,last
}。
对cppreference的两种可能的实现都进行以下检查:
if (first == last) {
return last;
}
std::adjacent_find(last, last)
UB是由UB还是由标准定义的?
答案 0 :(得分:3)
不。定义明确。
引用C ++标准草案N4296,第25.2.8 / 1节:
返回:第一个迭代器
{'a': 42}
使得i
和i
都在i + 1
范围内, 符合以下相应条件:[first,last)
,*i == *(i + 1)
。 退货pred(*i, *(i + 1)) != false
(如果找不到这样的迭代器)。
因此,如果last
,则表示搜索范围为空,因此该方法应返回first == last
。
对CppReference的检查非常正确。同样是mentioned on CppReference:
如果未找到此类元素,则返回
last