文章目錄
- 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 的一些問題。
之后我會持續更新,如果喜歡我的文章,請記得一鍵三連哦,點贊關注收藏,你的每一個贊每一份關注每一次收藏都將是我前進路上的無限動力 !!!↖(▔▽▔)↗感謝支持!