深入解析 C++17 中的 std::not_fn

ops/2025/2/1 3:33:31/

微信图片_20250130145837.png

文章目录

    • 1. std::not_fn 的定义与目的
    • 2. 基本用法
      • 2.1 基本示例
      • 2.2 使用 Lambda 表达式
      • 2.3 与其他函数适配器的比较
    • 3. 在标准库中的应用
      • 3.1 结合标准库算法使用
        • 3.1.1 std::find_if 中的应用
        • 3.1.2 std::remove_if 中的应用
        • 3.1.3 其他标准库算法中的应用
    • 4. 高级技巧与最佳实践
      • 4.1 性能优化与考虑
      • 4.2 与 Lambda 表达式的互补使用
      • 4.3 常见误区与避免方法
    • 5. 总结

在 C++17 中,std::not_fn 是一个非常有用的函数适配器,它能够对给定的可调用对象生成其逻辑非(negation)版本。通过 std::not_fn,开发者可以更加简洁地表达逻辑反转的条件,使代码更加清晰和易于维护。

1. std::not_fn 的定义与目的

std::not_fn 的定义如下:

template <class F>
constexpr /* unspecified */ not_fn(F&& f) noexcept;

它接受一个可调用对象 f,并返回一个新的可调用对象。当调用返回的对象时,它会对 f 的返回结果取反。这在需要对某些条件进行逻辑反转时非常有用,例如在标准库算法中筛选不满足某一条件的元素。

2. 基本用法

2.1 基本示例

以下是一个简单的示例,展示如何使用 std::not_fn:

#include <algorithm>
#include <functional>
#include <vector>
#include <iostream>bool is_even(int n) {return n % 2 == 0;
}int main() {std::vector<int> numbers = {1, 2, 3, 4, 5, 6};// 使用 std::not_fn 过滤奇数auto is_odd = std::not_fn(is_even);numbers.erase(std::remove_if(numbers.begin(), numbers.end(), is_odd),numbers.end(

http://www.ppmy.cn/ops/154644.html

相关文章

pytorch实现半监督学习

半监督学习&#xff08;Semi-Supervised Learning&#xff0c;SSL&#xff09;结合了有监督学习和无监督学习的特点&#xff0c;通常用于部分数据有标签、部分数据无标签的场景。其主要步骤如下&#xff1a; 1. 数据准备 有标签数据&#xff08;Labeled Data&#xff09;&…

Redis内部数据结构--跳表详解

跳表 1. 什么是跳表--skiplist2. skiplist的效率如何保证3. 跳表的实现4. 跳表与平衡搜索树和哈希表的对比 1. 什么是跳表–skiplist skiplist本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为…

【事务管理】

目录 一. 介绍与操作二. Spring事务管理三. 事务四大特性 \quad 一. 介绍与操作 \quad \quad 二. Spring事务管理 \quad 推荐加在经常进行增删改的方法上 \quad 三. 事务四大特性 \quad ctrlaltt

实验一---典型环节及其阶跃响应---自动控制原理实验课

一 实验目的 1.掌握典型环节阶跃响应分析的基本原理和一般方法。 2. 掌握MATLAB编程分析阶跃响应方法。 二 实验仪器 1. 计算机 2. MATLAB软件 三 实验内容及步骤 利用MATLAB中Simulink模块构建下述典型一阶系统的模拟电路并测量其在阶跃响应。 1.比例环节的模拟电路 提…

python Flask-Redis 连接远程redis

当使用Flask-Redis连接远程Redis时&#xff0c;首先需要安装Flask-Redis库。可以通过以下命令进行安装&#xff1a; pip install Flask-Redis然后&#xff0c;你可以使用以下示例代码连接远程Redis&#xff1a; from flask import Flask from flask_redis import FlaskRedisa…

Java面试题2025-设计模式

1.说一下开发中需要遵守的设计原则&#xff1f; 设计模式中主要有六大设计原则&#xff0c;简称为SOLID &#xff0c;是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)&#xff0c;六大设计原则分别如下&#xff1a; 1、单一职责原则 单一职责原则的定义描述非…

windows蓝牙驱动开发-查询蓝牙接口

蓝牙驱动程序堆栈会公开以下接口&#xff0c;配置文件驱动程序可使用这些接口与蓝牙设备交互。 GUID_BTHDDI_SDP_NODE_INTERFACE&#xff1a; 配置文件驱动程序会查询 GUID_BTHDDI_SDP_NODE_INTERFACE 以获取指向允许其创建服务发现协议 (SDP) 记录的函数的指针。此接口对应于…

pycharm 运行远程环境问题 Error:Failed to prepare environment.

问题排查 拿到更详细的报错信息&#xff1a; Help > Diagnostic Tools > Debug Log Settings section: 添加下面的配置 com.intellij.execution.configurations.GeneralCommandLine 重显报错&#xff0c;我这里是再次运行代码打开 Help | Collect Logs and Diagnosti…