C++中的谓词是什么?
What's the predicate in C++?
可能的重复项:
C++中的谓词是什么?
当我阅读C++入门时,有一个定义的术语是谓词。
定义是这样的:
返回可转换为 bool 的类型的函数。通常由通用算法用于测试元素。库使用的谓词要么是一元(采用一个参数)要么是二进制(采用两个参数)。
任何返回可以转换为 bool 的类型的人都可以是谓词!右?或者还有其他一些限制性条件。
谢谢!
在C++的上下文中没有谓词的正式定义(无论如何我都知道),但它通常意味着可以在真/假上下文中使用的函数。
以下是来自 cppreference 的 count_if 的可能实现,说明了它在谈论什么:
template<class InputIt, class UnaryPredicate>
typename iterator_traits<InputIt>::difference_type
count_if(InputIt first, InputIt last, UnaryPredicate p)
{
typename iterator_traits<InputIt>::difference_type ret = 0;
for (; first != last; ++first) {
if (p(*first)) {
ret++;
}
}
return ret;
}
p
必须返回可以在if
语句中使用的东西,它基本上可以归结为。
例如:
class T {};
T f(int x)
{
return T();
}
这不是count_if的有效谓词,因为 T 不能隐式转换为布尔值。
换句话说:
if (f(4)) { }
是不可编译的代码。
但是,如果 T 可以隐式转换为布尔值,f
将是一个可接受的谓词(尽管非常奇怪)。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- C++中的谓词是什么?
- 替换由谓词确定的 std::string 中的字符的最 stl-ish 方法是什么