性能&设计模式

cpp 复制代码
class Singleton {
public:
static Singleton& getInstance() {
    static Singleton instance; // 局部静态变量
    return instance;
}
private:
    Singleton() {}
    Singleton(const Singleton&) = delete; // 禁止拷贝
    Singleton& operator=(const Singleton&) = delete; // 禁止赋值
};

|-----------------------|-----------------|-----------------|-----------------|----------|------------|--------------------|
| 容器类型 | 插入性能 | 删除性能 | 查找性能 | 随机访问性能 | 内存使用情况 | 底层实现 |
| std::vector | 末尾 O(1),其他 O(n) | 末尾 O(1),其他 O(n) | O(n) | O(1) | 紧凑(数组式存储) | 动态数组 |
| std::deque | 前后 O(1) | 前后 O(1) | O(n) | O(1) | 较紧凑 | 分块数组 |
| std::list | O(1) | O(1) | O(n) | O(n) | 高(每个元素有指针) | 双向链表 |
| std::forward_list | O(1) | O(1) | O(n) | O(n) | 较低 | 单向链表 |
| std::map | O(log n) | O(log n) | O(log n) | O(log n) | 较高(树结构) | 红黑树 |
| std::unordered_map | O(1) 均摊,最坏 O(n) | O(1) 均摊,最坏 O(n) | O(1) 均摊,最坏 O(n) | 不支持 | 较高(哈希表开销) | 哈希表 |
| std::set | O(log n) | O(log n) | O(log n) | O(log n) | 较高(树结构) | 红黑树 |
| std::unordered_set | O(1) 均摊,最坏 O(n) | O(1) 均摊,最坏 O(n) | O(1) 均摊,最坏 O(n) | 不支持 | 较高(哈希表开销) | 哈希表 |
| std::stack | O(1) | O(1) | 不支持 | 不支持 | 与底层容器相同 | deque / vector |
| std::queue | O(1) | O(1) | 不支持 | 不支持 | 与底层容器相同 | deque |
| std::priority_queue | O(log n) | O(log n) | O(1) | 不支持 | 与底层容器相同 | 堆结构 |

  • mapmap 中的元素是按 键值的升序 存储的。由于底层使用了红黑树结构,每次插入元素时会自动对元素进行排序。你可以在遍历时按键值的顺序访问元素。

  • unordered_mapunordered_map 中的元素 没有特定的顺序。哈希表不维护元素的顺序,元素的插入顺序和访问顺序没有特定规则,完全取决于哈希值的分布。

相关推荐
言乐66 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
略略略咯咯11 小时前
(总结)设计模式
设计模式
WWJA王文举13 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha131413 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
ShineWinsu14 小时前
对于C++:C++11中lambda、function、bind的解析
c++·面试·笔试·开发·lambda·bind·function
码匠许师傅14 小时前
【C++ 面试真题】聊聊 C++ 的拷贝构造与拷贝赋值
java·c++·面试
qq_4480111615 小时前
C语言中的动态内存分配
c语言·开发语言·php
旖旎夜光15 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
汉字萌萌哒15 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter16 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具