gpt4 book ai didi

c++ - 函数描述与 C++ 引用上的可能实现

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:45 24 4
gpt4 key购买 nike

std::lower_bound 的两个引用页中和 std::upper_bound 来自 C++ reference我读了

[...] uses operator< to compare the elements, [...]

这对我很有用,因为有了这些信息我就知道,即使后者起作用了

Returns an iterator pointing to the first element in the range [first, last) that is greater than value

它仍然使用 operator<这样做,而不是 operator> ,因此必须为存储在容器中的对象的类/类型定义前者。 可能的实现 部分,行 if (!(value < *it)) { , 正好证实了这一点。

但是,例如, std::remove 的引用页,为此我读到了

Removes all elements that are equal to value

没有提到任何oparator根本没有,所以原则上我不知道假设在容器中存储的对象类中定义了哪个/哪些。 可能的实现使用operator== (参见 if (!(*i == value)) 行)。

因此我的问题是:某些函数的文档页面是否有意不指定调用该函数的类必须满足的“要求”?

最佳答案

虽然 cppreference 一般都很好,但它是一个社区维护的项目;不是官方文档。它还有时会使用稍微模棱两可的措辞来使文本更易于理解。

对于官方的要求,我们必须转向标准。在那里,所有这些要求都被明确地阐明了:

来自 [lower.bound]

Let comp be less{} and proj be identity{} for overloads with no parameters by those names.
...
Returns: The furthermost iterator i in the range [first, last] such that for every iterator j in the range [first, i), bool(invoke(comp, invoke(proj, *j), value)) is true.

来自 [upper.bound]

Let comp be less{} and proj be identity{} for overloads with no parameters by those names.
...
Returns: The furthermost iterator i in the range [first, last] such that for every iterator j in the range [first, i), !bool(invoke(comp, invoke(proj, *j), value)) is true.

来自 [alg.remove]

Let E be
-- bool(*i == value) for remove,
...
Effects: Eliminates all the elements referred to by iterator i in the range [first, last) for which E holds.

这些描述没有歧义。 std::lower_boundstd::upper_bound 默认使用 std::less 进行比较,而 std::remove 使用 operator==

关于c++ - 函数描述与 C++ 引用上的可能实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com