C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结
创始人
2024-11-06 13:36:32
0

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

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

1. vector

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

5. multiset

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

7. unordered_multiset

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

相关内容

热门资讯

透视存在!hhpkoer辅助器... 透视存在!hhpkoer辅助器视频(透视)永久脚本辅助挂(详细辅助wpk教程);1、hhpkoer辅...
第4分钟了解!约逗东乡辅助器,... 第4分钟了解!约逗东乡辅助器,789大菠萝可以控制吗(都是是真的有挂)1、让任何用户在无需789大菠...
透视脚本"aapok... 透视脚本"aapoker公共底牌"详细辅助必胜教程(竟然存在有挂)运aapoker公共底牌辅助工具,...
透视透视!xpoker辅助神器... 透视透视!xpoker辅助神器(透视)永久脚本辅助神器(详细辅助必备教程);1)xpoker辅助神器...
第3分钟了解!福建天天开心万能... 第3分钟了解!福建天天开心万能福州,中至余干万能辅助器(一贯真的是有挂)1、游戏颠覆性的策略玩法,独...
透视科技"智星德州插... 透视科技"智星德州插件2024最新版"详细辅助2025新版教程(真是存在有挂);1、让任何用户在无需...
透视ai代打!wejoker免... 透视ai代打!wejoker免费脚本(透视)永久脚本辅助软件(详细辅助教你攻略)1)wejoker免...
第5分钟了解!大唐辅助神器,衢... 第5分钟了解!大唐辅助神器,衢州都莱到底有挂吗(其实是真的有挂)第5分钟了解!大唐辅助神器,衢州都莱...
透视ai代打!wpk透视插件(... 透视ai代打!wpk透视插件(透视)永久脚本辅助软件(详细辅助wepoke教程)wpk透视插件辅助器...
透视ai"epoke... 透视ai"epoker透视底牌"详细辅助切实教程(真是存在有挂)1、epoker透视底牌系统规律教程...