当前位置: 首页 > news >正文

C++高频知识点(十七)

文章目录

  • 81. 你对智能指针的了解
  • 82. 一元、二元仿函数的区别和使用背景
    • 一元仿函数
    • 二元仿函数
  • 83. 描述Linux下文件删除的原理
  • 84. 什么是菱形继承?有什么问题,怎么解决?
    • 解决菱形继承问题
  • 85. IO多路复用是什么?
    • select
    • poll
    • epoll
    • select 图示
    • epoll 图示
    • epoll 优越的数据结构(红黑树+双向链表)

81. 你对智能指针的了解

在这里插入图片描述

82. 一元、二元仿函数的区别和使用背景

一元仿函数

在这里插入图片描述

#include <vector>
#include <algorithm>
#include <iostream>// 一元谓词:判断整数是否为偶数
class IsEven {
public:bool operator()(int x) const {return x % 2 == 0;}
};int main() {std::vector<int> vec = {1, 2, 3, 4, 5, 6};// 使用find_if和一元谓词查出第一个偶数// std::find_if 是 C++ 标准库中的一个算法,用来在容器(比如 std::vector)中查找第一个符合给定条件的元素。// template< class InputIterator, class UnaryPredicate >// InputIterator find_if( InputIterator first, InputIterator last, UnaryPredicate pred );/*InputIterator first:容器的起始迭代器。对于 std::vector,这通常是 vec.begin(),即指向容器第一个元素的迭代器。InputIterator last:容器的结束迭代器。对于 std::vector,这通常是 vec.end(),即指向容器最后一个元素后面的位置。UnaryPredicate pred:一个 一元谓词(返回 bool 的函数或函数对象),它定义了要查找的条件*/auto it = std::find_if(vec.begin(), vec.end(), IsEven());if (it != vec.end()) {std::cout << "The first even number is: " << *it << std::endl;} else {std::cout << "No even number found." << std::endl;}return 0;
}

在这里插入图片描述

二元仿函数

在这里插入图片描述

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional> // 包含std::abs// 定义一个比较函数,用于比较两个整数的绝对值
struct AbsCompare {bool operator()(int a, int b) const {// 如果 a 的绝对值小于 b 的绝对值,返回 true;否则返回 falsereturn std::abs(a) < std::abs(b);}
};int main() {std::vector<int> vec = {3, -5, 2, -1, 4};std::sort(vec.begin(), vec.end(), AbsCompare()); // 使用三元函数进行排序for (int num : vec) {std::cout << num << ' ';}std::cout << std::endl;return 0;
}

在这里插入图片描述

83. 描述Linux下文件删除的原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

84. 什么是菱形继承?有什么问题,怎么解决?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决菱形继承问题

C++ 通过 虚拟继承(Virtual Inheritance)来解决菱形继承问题。虚拟继承使得通过多个路径继承自同一个基类时,基类只会有一份副本。

在这里插入图片描述

#include <iostream>class A {
public:int x;A() : x(10) {}void print() { std::cout << "A: " << x << std::endl; }
};class B : virtual public A { 
public:B() { x = 20; } 
};class C : virtual public A { 
public:C() { x = 30; } 
};class D : public B, public C { 
public:void show() { std::cout << "D: " << x << std::endl; }
};int main() {D d;d.show();return 0;
}

在这里插入图片描述
在这里插入图片描述

85. IO多路复用是什么?

IO多路复用(I/O Multiplexing)是指在单个线程或进程中同时管理多个输入/输出操作的能力,通常用于处理多个客户端连接,避免为每个连接创建一个线程或进程。常见的 IO多路复用 系统调用有 select、poll 和 epoll。它们的作用都是监视多个文件描述符,并在其中的某个文件描述符准备好进行操作时,通知应用程序。

select

select 是最早实现的 I/O 多路复用机制,在 UNIX 和 Linux 系统中都广泛存在

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

在这里插入图片描述

poll

在这里插入图片描述
在这里插入图片描述

epoll

在这里插入图片描述

在这里插入图片描述

select 图示

在这里插入图片描述
在这里插入图片描述

epoll 图示

在这里插入图片描述

epoll 优越的数据结构(红黑树+双向链表)

epoll 的优越性主要来自其 高效的数据结构设计,特别是 红黑树 和 双向链表 的组合。它们使得 epoll 在性能和扩展性上相比于传统的 select 和 poll 更加优秀。接下来,我们将详细讨论这些数据结构如何帮助 epoll 提高性能,并解决了 select 和 poll 的一些问题。

在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

http://www.dtcms.com/a/322937.html

相关文章:

  • 【lucene】HitsThresholdChecker命中阈值检测器
  • istio笔记03--快速上手多集群mesh
  • 本地WSL ubuntu部署whisper api服务
  • NVIDIA Jetson JetPack 全面解析:从硬件到定制镜像
  • 智能情趣设备、爆 bug:可被远程操控。。。
  • 目标检测数据集 - 无人机检测数据集下载「包含COCO、YOLO两种格式」
  • Python 中的 Mixin
  • 二十、MySQL-DQL-条件查询
  • 第八章:终极合体 —— 实现智能一键分组
  • 【Python 工具人快餐 · 第 1 份】
  • 【代码随想录|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项】
  • 第05章 排序与分页
  • 模板方法模式:优雅封装算法骨架
  • Python-UV-portry项目管理流程
  • redis8.0.3部署于mac
  • C++ 中的智能指针
  • Python 继承和多态
  • ElaWidgetTools qt5+vs2019编译
  • 1.JavaScript 介绍
  • 基于STM32的智能电表设计与实现
  • 计算机组成原理2-4-1:浮点数的表示
  • Linux 安装 JDK 8u291 教程(jdk-8u291-linux-x64.tar.gz 解压配置详细步骤)​
  • 【c++】探秘Loop机制:C++中优雅的双向数据交互模式
  • 低速CAN 高速CAN是否兼容?
  • 功能测试详解
  • 【面试题】cookie和session 的区别
  • Ubuntu下Nginx的部署后端项目(Java为例),配置Nginx代理
  • 自编教材实操课程学习笔记
  • 商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析
  • dify离线插件安装