C++ STL概念是否涵盖STL算法的所有参数要求?
查看某些算法的模板名称时,C++ STL概念是否涵盖STL算法的所有参数要求?,c++,algorithm,stl,c++-concepts,callable-object,C++,Algorithm,Stl,C++ Concepts,Callable Object,查看某些算法的模板名称时, 我看到这个名称对应于一个库概念 比如说 template< class InputIt1, class InputIt2, class BinaryPredicate > std::pair<InputIt1,InputIt2> mismatch( InputIt1 first1, InputIt1 last1, InputIt2 first2, BinaryPredicate p); template
我看到这个名称对应于一个库概念 比如说
template< class InputIt1, class InputIt2, class BinaryPredicate >
std::pair<InputIt1,InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2,
BinaryPredicate p);
template
std::pair
不匹配(InputIt1 first1,InputIt1 last1,
输入2 first2,
二元谓词p);
它接受一个二进制谓词
,它也是一个
但看看其他算法,我发现:
- 一元谓词
- 一元函数
- 一元运算
- 二进制运算
- 等
这些概念是通过结合已有的概念而导出的吗? < P> C++标准没有定义“概念”。它对“要求”的定义如下: 但有些需求使用的语法与其他需求不同。例如,
allocator
和swappable
使用小写斜体(allocator),我的示例列表中的其他字体使用camelcase单空格字体,或者,如标准中所述,使用类型常量(EqualityComparable
)
其他“概念”,如PODType
,在本标准中仅作为定义处理
例如,
BinaryPredicate
既不是概念也不是定义;正如使用它的函数的模板名称一样:
void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);
void unique();
模板void unique(二进制谓词pred);
效果:从引用的每个连续相等元素组中删除除第一个元素以外的所有元素
由迭代器i
在[第一个+1,最后一个)
范围内执行,其中*i==*(i-1)
(对于没有
参数)或pred(*i,*(i-1))
(对于具有谓词参数的版本)保持有效。无效
只有迭代器和对已擦除元素的引用
抛出:除非相等比较或谓词抛出异常,否则为空
复杂度:如果范围[first,last)
不为空,则正好是应用程序的(last-first)-1
对应的谓词,否则不应用该谓词
如您所见,
BinaryPredicate
没有定义。它只是显示了它如何影响std::unique
的行为
另一方面,概念列表是从概念提案中提取出来的,这是非标准的。此外,
cppreference
并不完美,从概念提案的角度来看,并不是每个wiki页面都是完整或完整的,还有其他模板参数甚至没有出现在标准中,如UnaRyTrace< /Calp> .< /P> CPORID记录了其中的一些,而不是其他的。我认为您是在过度思考。<代码> unay-谓词< />看起来至少是<代码>谓词< /> >的同义词。<代码> BinaryPredicate <代码>是在实际C++标准中使用和定义的术语/类型名称(见第25.1节第9段)。但是,标准中从未出现术语UnaryPredicate
和UnaryFunction
。BinaryOperation
和UnaryOperation
在标准中使用,但没有像BinaryPredicate
那样明确定义。该页面上的参考列表“C++规范的规范文本中使用的命名要求”,而不是概念(实际范围)建议中的命名要求。
void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);