CPP容器-priority_queue
std::priority_queue 是 C++
标准库中的优先队列容器适配器,基于堆数据结构实现,默认提供最大堆功能(最大元素始终位于顶部)。以下是
std::priority_queue 的完整 API 参考。
1. 构造函数
方法
描述
时间复杂度
priority_queue<T> pq
创建空优先队列(使用
less<T> 比较器)
O(1)
priority_queue<T, Container, Compare> pq
指定底层容器和比较器
O(1)
priority_queue<T> pq(comp)
使用自定义比较器
O(1)
priority_queue<T> pq(begin, end)
用迭代器范围初始化
O(n)
priority_queue<T> pq(begin, end, comp)
用迭代器范围和比较器初始化
O(n)
2....
三次握手的过程,以及为什么是三次,而不是四次,两次
三次握手(TCP连接建立)过程:
第一次握手是建立连接时,客户端发送SYN包到服务器,并等待服务器的确认。
第二次握手时,服务器收到SYN包,同时自己也给客户端发送一个确认包,SYN+ACK包。
第三次握手时,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK。此包发送完毕后,客户端和服务器端进入到ESTABLISHED状态,也就是TCP连接成功状态,到此完成三次握手。
为什么不是四次握手?为什么不能两次握手?
因为三次握手才能保证双方具有接收和发送的能力。两次握手可能会导致资源的浪费,由于没有第三次握手,服务器无法确认客户端是否收到了自己的回复,所以每收到一个SYN,服务器都会主动去建立一个连接,而四次握手可以优化为三次。
CPP实现十大排序算法
以下是 C++ 实现的十大排序算法 及其详细介绍,包括
时间复杂度、空间复杂度、稳定性、适用场景 等。
1. 冒泡排序(Bubble
Sort)
思想:重复比较相邻元素,如果顺序错误就交换,直到没有交换发生。
特点:简单但效率低,适合小规模数据。
void bubbleSort(vector<int>& arr) { int n = arr.size(); for (int i = 0; i < n - 1; i++) { bool swapped = false; for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { swap(arr[j], arr[j + 1]); swapped = true; }...
CPP容器-vector
std::vector 是 C++
中最常用的动态数组容器,提供高效的随机访问和动态扩容功能。
1. 构造函数
方法
描述
时间复杂度
vector<T> v
创建空 vector
O(1)
vector<T> v(n)
创建包含 n 个默认初始化元素的
vector
O(n)
vector<T> v(n, value)
创建包含 n 个 value 的 vector
O(n)
vector<T> v(begin, end)
用迭代器范围 [begin,end) 初始化
O(n)
vector<T> v(initializer_list)
用初始化列表初始化
O(n)
vector<T> v(other_vector)
拷贝构造函数
O(n)
vector<T>...
从输入URL到页面展示发生了什么
URL 解析,提取协议、域名和路径等信息。
DNS 域名解析,将域名转换为 IP 地址,先查缓存,再递归查询 DNS
服务器。
三次握手建立 TCP 连接,如果是 HTTPS 还会进行 TLS 加密握手。
发送 HTTP 请求。
服务器处理请求。
服务器返回响应结果。
四次挥手关闭 TCP 连接。
浏览器解析 HTML。
浏览器布局渲染。
Hexo 博客文章发布步骤
创建文章
使用命令行创建
在博客根目录下,使用以下命令创建新文章:
hexo new post "文章标题"
这将在 source/_posts 目录下创建一个新的 Markdown
文件,文件名格式为:年-月-日-文章标题.md
手动创建
你也可以直接在 source/_posts 目录下手动创建 Markdown
文件,但需要确保文件格式正确。
文章结构
每篇文章都包含两个主要部分:
Front-matter: 文章头部配置
正文内容:文章主体内容
Front-matter 配置
Front-matter 是文章开头的配置部分,使用 ---
包裹。常用配置包括:
---title: 文章标题date: 年-月-日 时:分:秒tags: - 标签1 - 标签2categories: 分类cover:...