C++ std::not_fn 函数2025年3月21日 | 阅读 4 分钟 C++ 中的 std::not_fn 实用程序是 C++ 头文件的一个组成部分,并在 C++17 中引入。通过生成否定其他可调用对象(例如函数、函数 指针、lambda 表达式 或函数 对象)结果的 函数 对象,它在函数式编程中发挥着非常专业和实用的作用。 我们经常在函数式编程和算法上下文中处理谓词,这些函数依赖于条件并返回 布尔 结果(真或假)。有时,我们可能希望自动反转(否定)现有函数的逻辑,而不是创建新的谓词来检查相反的条件。这就是 std::not_fn 发挥作用的地方。 为什么使用 std::not_fn?std::not_fn 的主要目的是接受一个现有的可调用对象(函数、lambda 表达式或函数对象),并返回一个新的可调用对象,该对象会否定原始可调用对象的结果。这在需要现有谓词的相反条件的算法中特别有用,例如 std::find_if、std::remove_if 或 std::all_of。通过使用 std::not_fn,您可以轻松反转谓词的逻辑,而无需编写额外的代码来手动否定其结果。 语法它具有以下语法: 参数
返回值一个可调用对象(函数对象),当被调用时,返回原始函数结果的否定。 程序我们来看一个例子来说明 C++ 中的 std::not_fn 函数。 输出 Odd numbers (negation of is_even): -1 25 7 Non-positive numbers (negation of IsPositive functor): -1 -8 0 Numbers <= 5 (negation of lambda is_greater_than_five): -1 -8 0 Any negative numbers? Yes 说明此代码演示了将 {std::not_fn} 与函数、函数对象和 lambda 表达式一起使用。由于它否定了可调用对象的结果,因此当我们希望反转条件而无需编写新逻辑时,'std::not_fn' 函数非常有用。
复杂度分析时间复杂度std::for_each 循环的每次迭代都遍历向量中的每个元素。由于函数调用和 std::not_fn 应用程序在每次迭代中都是常数时间操作,因此每个循环的时间复杂度为 O(n),其中 n 是向量中的条目数。 不利的一面是,std::any_of 在最坏情况下的时间复杂度为 O(n)O(n)O(n),因为它遍历整个范围(或向量)以根据指定的谓词检查每个元素。如果没有元素满足条件,算法必须评估所有元素,导致线性时间复杂度。 空间复杂度除了迭代器和临时 变量 之外,所有操作的空间复杂度都为 O(1)O(1)O(1),无论输入大小如何,它们都需要常量内存。这是因为向量本身的大小在操作期间不会改变,从而导致算法执行的内存使用量固定。 |
珠宝和石头问题是一个常见的编码练习,有时会在面试中出现。它要求我们估计石头中珠宝的比例。目标是找到 S 中也存在于 J 中的字符数,给定两个...
阅读 4 分钟
C++ 是由 Bjarne Stroustrup 设计的广泛使用且强大的强类型语言,是 C 语言的改进版本。C++ 在处理系统资源方面具有相当大的能力,可用于过程式和面向对象编程,并允许在活动中应用...
阅读 6 分钟
在本文中,我们将讨论其算法、示例和用例。什么是 C++ 中的梅森素数?梅森素数是一种特殊的素数,其形式本身也是一个素数。它们被称为梅森数...
阅读 4 分钟
链表是计算机科学和编程语言中的基本数据结构,几乎出现在所有类型的计算机系统中。它与数组不同,因为它是动态的,并且通过组合顺序...
7 分钟阅读
简介:备忘录模式是一种行为设计模式,用于捕获对象的内部状态并将其外部化,以便以后可以恢复到该状态而不违反封装。当您需要实现撤销机制、检查点时,此模式特别有用……
阅读 10 分钟
在本文中,您将通过几个示例了解如何使用 C++ 中的 DSU 检测图中的循环。图:图是由节点(顶点)和连接节点对的边组成的集合。图可以是定向的或非定向的,并且可以分配权重……
阅读20分钟
素数测试方法是数论和计算机科学中最简单的子类别之一,其中输入正整数被测试以确定它是否属于自然素数。一个数被描述为素数,如果它...
阅读 12 分钟
在本文中,我们将讨论如何在 C++ 的 Std::unordered_map 中为用户定义类型实现自定义哈希函数。在讨论自定义哈希函数的实现之前,我们必须了解 C++ 中的 std::unordered_map。什么是 std::unordered_map?在当代的 C++ 编程中,std::unordered_map 容器提供...
阅读 4 分钟
Lambda 是 C++ 编程中可以直接在代码中声明的匿名函数。C++17 中增加了在 lambda 中显式捕获 *this 指针的能力,这使得它们能够从封闭类中获取此指针。此功能使...
阅读 4 分钟
订阅者列表、向量和映射是 C++ 标准模板库 (STL) 中存在的众多复杂的 C++ 标准模板库 (STL) 信息结构和算法中的一些,它们已经得到了改进。然而,这些容器的目的是揭示 STL 的伟大知识...
阅读 12 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India