gpt4 book ai didi

c++ - STL 概念是否涵盖了 STL 算法的所有参数要求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:58 29 4
gpt4 key购买 nike

在查看一些算法的模板名称时,
我看到这个名字对应于一个图书馆的概念。

std::mismatch例如。

template< class InputIt1, class InputIt2, class BinaryPredicate >
std::pair<InputIt1,InputIt2>
mismatch( InputIt1 first1, InputIt1 last1,
InputIt2 first2,
BinaryPredicate p);

它需要一个 BinaryPredicate 也是一个 library concept .


虽然看看其他算法,我看到:

  • 一元谓词
  • 一元函数
  • 一元运算
  • 二元运算
  • 等等

而且他们没有对应的概念。

他们被排除在外有什么原因吗?
这些概念是否可以通过结合现有概念推导出来?

最佳答案

C++ 标准没有定义“概念”。它定义“requirementes”,如:

EqualityComparable, LessThanComparable, DefaultConstructible,
MoveConstructible, CopyConstructible, MoveAssignable, CopyAssignable,
Destructible, NullablePointer, Hash, TrivialClock, Allocator,
Swappable or Container

但是有些要求使用与其他要求不同的语法。例如,allocatorswappable 使用小写斜体 (allocator),我的示例列表中的其他字体使用驼峰等宽字体,或者,如前所述在标准中,常量类型 (EqualityComparable)。

其他“概念”,如 PODType,在标准中仅被视为定义。

例如,BinaryPredicate 既不是概念也不是定义;就像使用它的函数的模板名称一样:

void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);

Effects: Erases all but the first element from every consecutive group of equal elements referred to by the iterator i in the range [first + 1,last) for which *i == *(i-1) (for the version with no arguments) or pred(*i, *(i - 1)) (for the version with a predicate argument) holds. Invalidates only the iterators and references to the erased elements.

Throws: Nothing unless an exception is thrown by the equality comparison or the predicate.

Complexity: If the range [first,last) is not empty, exactly (last - first) - 1 applications of the corresponding predicate, otherwise no applications of the predicate.

如您所见,未定义 BinaryPredicate。它只是展示了它如何影响 std::unique 的行为。

另一方面,cppreference概念列表是从非标准的概念提案中提取的。此外,cppreference 并不完美,并不是每个 wiki 页面都从概念提案的角度完整或完整地描述,还有其他模板参数甚至没有出现在标准中,比如 UnaryOperator

关于c++ - STL 概念是否涵盖了 STL 算法的所有参数要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208397/

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