【发布时间】:2016-09-03 18:04:40
【问题描述】:
当 first <= last 条件不满足时,官方 C++ 标准对算法有何规定,first 和 last 是传递给标准算法之一的迭代器?
我看到了三种可能性:
- 算法需要检查条件,如果它没有满足,算法不会做任何事情
- 需要算法才能引发异常
- 这是未定义的行为,所以...任何事情都可能发生
我很困惑,因为在算法描述中我没有看到关于first 和last 的requires 子句。
EDIT1:这是对问题的简化。更准确的版本是“当通过连续应用operator++ 无法从first 访问last 时,算法会发生什么?
EDIT2:我问这个问题是因为我正在实现std::reverse 的专门化,我想知道是否应该检查这个条件,或者当last 无法访问时我是否可以允许该函数做一些完全错误的事情来自first?
【问题讨论】:
-
条件不满足时,直接返回false。
-
@PankajKumarThapa 阅读问题...当我执行
std::sort(first, last)而last出现在first之前会发生什么? -
您的问题是基于算法需要这种排序的前提,但您最后声明说您没有证据证明这种说法。你到底在问什么?
-
@LightnessRacesinOrbit 我相应地修改了问题
标签: c++ algorithm language-lawyer undefined-behavior c++-standard-library