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

相关文章:

  • 《Resolving tissue complexity by multimodal spatial omics modeling with MISO》
  • 9. 堆和栈有什么区别
  • Vitalik谈以太坊:ETH财库储备策略“有益且有价值”
  • Kotlin 协程线程切换机制详解
  • AG32cpld实现一个UartTx“外设”
  • 智慧能源设备巡检缺陷漏检率↓76%:陌讯多模态融合算法实战解析
  • Android适配最新SplashScreen方案:让启动页不再“翻车“
  • webrtc弱网-BandwidthQualityScaler 源码分析与算法原理
  • 视图是什么?有什么用?什么时候用?MySQL中的视图
  • Android MediaCodec 音视频编解码技术详解
  • linux php版本降级,dnf版本控制
  • Amazon Linux 训练lora模型的方式
  • Web自动化技术选择
  • 回答“http协议 ,js组件化,工程化, seo优化策略 ,针对不同平台终端适配 web标注和兼容性”
  • 基于遗传优化的智能灌溉系统控制策略matlab仿真
  • Beelzebub靶机通关教程
  • 【工具】Python多环境管理
  • 【Java基础】字符串不可变性、string的intern原理
  • 【李宏毅-2024】第六讲 大语言模型的训练过程1——预训练(Pre-training)
  • 搭建若依前后端分离版本的开发环境
  • 鸿蒙分布式任务调度深度剖析:跨设备并行计算的最佳实践
  • 在nodejs中使用Java方法
  • windows、linux应急响应入侵排查
  • React中实现完整的登录鉴权与权限控制系统
  • 云服务器--阿里云OSS(2)【Springboot使用阿里云OSS】
  • 原生Vim操作大全
  • Python映射合并技术:多源数据集成的高级策略与工程实践
  • Jmeter性能测试之安装及启动Jmeter
  • [Oracle] TRUNC()函数
  • imx6ull-驱动开发篇15——linux自旋锁