C++ 具名要求:二元谓词(BinaryPredicate)
来自cppreference.com
二元谓词(BinaryPredicate) 是一些标准库设施针对用户提供的实参所期待的一组要求。
给定二元谓词(BinaryPredicate) bin_pred
和一对迭代器 iter1
和 iter2
或一个迭代器 iter
和一个(可能为 const
的)值 value
时,表达式 bin_pred(*iter1, *iter2) 或 bin_pred(*iter, value) 的类型必须分别符合可布尔测试(BooleanTestable) 要求。
此外,不允许表达式的求值调用解引用迭代器的非 const 成员函数;从语法上讲,谓词必须接受 const
对象实参,且无论其实参是 const
还是非 const
都具有相同的行为。
[编辑]要求
- 谓词(Predicate)
- 可复制构造(CopyConstructible) (除非另行指明)
[编辑]标准库
下列标准库设施期待并非比较(Compare) 类型的二元谓词(BinaryPredicate) 。
删除连续的重复元素 ( std::forward_list<T,Allocator> 的公开成员函数) | |
删除连续的重复元素 ( std::list<T,Allocator> 的公开成员函数) | |
查找元素序列在特定范围中最后一次出现 (函数模板) | |
搜索一组元素中任一元素 (函数模板) | |
查找首对相同(或满足给定谓词)的相邻元素 (函数模板) | |
查找两个范围的首个不同之处 (函数模板) | |
判断两组元素是否相同 (函数模板) | |
(C++11) | 判断一个序列是否为另一个序列的排列 (函数模板) |
搜索元素范围的首次出现 (函数模板) | |
搜索元素在范围中首次连续若干次出现 (函数模板) | |
移除范围中连续重复元素 (函数模板) | |
创建某范围的不含连续重复元素的副本 (函数模板) | |
(C++17 弃用)(C++20 移除) | 构造定制的 std::binary_negate 对象 (函数模板) |
(C++11 起) | 唯一键的集合,按照键生成散列 (类模板) |
(C++11 起) | 键值对的集合,按照键生成散列,键是唯一的 (类模板) |
(C++11 起) | 键的集合,按照键生成散列 (类模板) |
(C++11 起) | 键值对的集合,按照键生成散列 (类模板) |
[编辑]缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2114 (P2167R3) | C++98 | 返回类型到 bool 的可转换性过于弱而无法反映实现的期待 | 加强要求 |
LWG 3031 | C++98 | const 值上的要求不充分 | 加强要求 |