我正在查看cppreference,但没有看到有关执行循环顺序的任何信息。
我的问题是:当调用时,std::ranges::any_of
我data.begin(), data.end()
是否确定它会按顺序从到进行begin()
并且end()
停止一次true
?
我正在查看cppreference,但没有看到有关执行循环顺序的任何信息。
我的问题是:当调用时,std::ranges::any_of
我data.begin(), data.end()
是否确定它会按顺序从到进行begin()
并且end()
停止一次true
?
不,没有这样的保证。
根据std::ranges::any_of所述的复杂性:
该实现可以自由地以不同于您提到的顺序进行迭代(例如以相反的顺序)。它也没有义务在谓词为真的第一个元素处停止。唯一的保证是它将在每个元素上使用谓词/投影最多 1 次。
话虽如此,您所提到的是对任何“正常”实施的非常合理的期望,并且我认为所有实施都会遵循它(尽管正如我所说,这不是强制性的)。
严格来说,标准没有具体规定。
但是,根据 C++ 标准,
[alg.any.of]
any_of
定义为:[algorithms.requirements]/4.1
说:并且
[tab:inputiterator]
(从)仅具有以下[input.iterators]
要求a != b
:*a
,,,,,和a->m
++r
(void)r++
*r++
因此,由于对迭代器的唯一要求(就遍历而言)是
++r
或r++
,因此可以合理地假设该函数将按顺序从first
到执行。last