当前位置: 首页 > 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.lryc.cn/news/615610.html

相关文章:

  • C++ 虚函数、多重继承、虚基类与RTTI的实现成本剖析
  • AI大模型模态特征详解
  • 鸿蒙分布式任务调度深度剖析:跨设备并行计算的最佳实践
  • <PLC><汇川><字符转换>在汇川PLC中,如何进行字符串的转换与比较?
  • 从零开始理解编译原理:设计一个简单的编程语言
  • 二十、MySQL-DQL-条件查询
  • Kotlin初体验
  • DeepSeek智能考试系统智能体
  • 在 VS Code 或 Visual Studio 2022 上搭建 ESP32-CAM 开发环境
  • Vulnhub----Beelzebub靶场
  • Day 20 奇异值SVD分解
  • 前端懒加载技术全面解析
  • 衰减器的计算
  • 【文献阅读】我国生态问题鉴定与国土空间生态保护修复方向
  • BeanDefinition 与 Bean 生命周期(面试高频考点)
  • C#异步编程双利器:异步Lambda与BackgroundWorker实战解析
  • 104-基于Flask的优衣库销售数据可视化分析系统
  • Python day39
  • PG靶机 - Shiftdel
  • 大语言模型提示工程与应用:前沿提示工程技术探索
  • AcWing 4579. 相遇问题
  • Horse3D引擎研发笔记(三):使用QtOpenGL的Shader编程绘制彩色三角形
  • 企业级高性能web服务器
  • 香橙派 RK3588 部署千问大模型 Qwen2-VL-2B 推理视频
  • Kubernetes CronJob bug解决
  • 前端工程化:从构建工具到性能监控的全流程实践
  • 应用层Http协议(1)
  • Spring框架基础
  • 黑马SpringAI项目-聊天机器人
  • 力扣热题100------70.爬楼梯