当前位置: 首页 > news >正文

C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结

最近用set比较多,复习一下基础。

在C++中,vectordequelistsetmultisetunordered_setunordered_multiset都是容器类,但它们有不同的特点和用途。下面是对它们的区别和示例说明:

1. vector

  • 特点: 动态数组,支持快速随机访问(通过索引)。
  • 时间复杂度: 插入和删除操作在末尾是常数时间复杂度,在中间和开头是线性时间复杂度。访问元素是常数时间复杂度。
  • 用途: 适用于需要频繁随机访问和在末尾进行插入和删除的情况。
#include <vector>
#include <iostream>int main() {std::vector<int> vec = {1, 2, 3};vec.push_back(4); // 在末尾插入vec[1] = 10; // 通过索引访问和修改for (int n : vec) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

2. deque

  • 特点: 双端队列,支持快速在两端进行插入和删除。
  • 时间复杂度: 两端插入和删除是常数时间复杂度,随机访问是常数时间复杂度。
  • 用途: 适用于需要在两端进行插入和删除操作的情况。
#include <deque>
#include <iostream>int main() {std::deque<int> deq = {1, 2, 3};deq.push_front(0); // 在前端插入deq.push_back(4); // 在末尾插入for (int n : deq) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

3. list

  • 特点: 双向链表,支持快速在任意位置进行插入和删除,但不支持随机访问。
  • 时间复杂度: 插入和删除是常数时间复杂度,访问元素是线性时间复杂度。
  • 用途: 适用于需要频繁插入和删除元素而不需要随机访问的情况。
#include <list>
#include <iostream>int main() {std::list<int> lst = {1, 2, 3};lst.push_front(0); // 在前端插入lst.push_back(4); // 在末尾插入auto it = lst.begin();std::advance(it, 2);lst.insert(it, 10); // 在中间插入for (int n : lst) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

4. set

  • 特点: 有序集合,元素不重复,自动排序。
  • 时间复杂度: 插入、删除、查找操作是对数时间复杂度。
  • 用途: 适用于需要有序集合且元素唯一的情况。
#include <set>
#include <iostream>int main() {std::set<int> s = {3, 1, 2};s.insert(4); // 插入元素for (int n : s) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

5. multiset

  • 特点: 有序集合,允许重复元素,自动排序。
  • 时间复杂度: 插入、删除、查找操作是对数时间复杂度。
  • 用途: 适用于需要有序集合且允许重复元素的情况。
#include <set>
#include <iostream>int main() {std::multiset<int> ms = {3, 1, 2, 2};ms.insert(4); // 插入元素for (int n : ms) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

6. unordered_set

  • 特点: 无序集合,元素不重复,使用哈希表实现。
  • 时间复杂度: 插入、删除、查找操作是平均常数时间复杂度。
  • 用途: 适用于需要快速查找且不关心顺序的情况。
#include <unordered_set>
#include <iostream>int main() {std::unordered_set<int> us = {3, 1, 2};us.insert(4); // 插入元素for (int n : us) {std::cout << n << " ";}std::cout << std::endl;return 0;
}

7. unordered_multiset

  • 特点: 无序集合,允许重复元素,使用哈希表实现。
  • 时间复杂度: 插入、删除、查找操作是平均常数时间复杂度。
  • 用途: 适用于需要快速查找且允许重复元素的情况。
#include <unordered_set>
#include <iostream>int main() {std::unordered_multiset<int> ums = {3, 1, 2, 2};ums.insert(4); // 插入元素for (int n : ums) {std::cout << n << " ";}std::cout << std::endl;return 0;
}
http://www.lryc.cn/news/416570.html

相关文章:

  • Python处理Redis
  • nodejs多版本随心切换-windows
  • json文件格式
  • 日撸Java三百行(day15:栈的应用之括号匹配)
  • Oracle-OracleConnector
  • 『 Linux 』线程池与 POSIX 线程的封装编码实现
  • 【C++】————哈希表
  • 前端学习AI历程
  • 常见中间件漏洞复现之【Tomcat】!
  • C++并发编程(一):线程基础
  • enq: HW - contention事件来啦
  • MyBatis补充
  • 系统架构师(每日一练16)
  • 实践致知第17享:电脑忽然黑屏的常见原因及处理方法
  • 微信小程序--实现地图定位---获取经纬度
  • 【Python系列】使用 `isinstance()` 替代 `type()` 函数
  • 【多模态大模型】 BLIP-2 in ICML 2023
  • HPC高性能计算平台
  • 前端常用的几个工具网站
  • 支付功能之代收代付
  • QPixmap
  • Laravel门面之下:构建自定义门面应用的艺术
  • 智启万象 | 2024 Google 开发者大会直播攻略
  • 技巧:print打印内容到控制台时信息显示不全
  • 3.表的操作
  • AI回答:C#项目编译后生成部分文件的主要职责
  • RPC通信的简单流程
  • 前端发版(发包)缓存,需要强制刷新问题处理
  • 洛谷练习(8.4/8.5)
  • DLMS/COSEM中的信息安全:加密算法(下)1