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; } 

相关内容

热门资讯

详细说明“wepokerplu... 您好:这款游戏是可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好...
辅助开挂!518互娱辅助器下载... 辅助开挂!518互娱辅助器下载,hhpoker软件可以玩吗(透视)开挂辅助工具(有挂分享);超受欢迎...
正品透视"wpk辅助... 正品透视"wpk辅助最怕三个东西"hhpoker辅助码怎么用(透视)开挂辅助脚本(真是有挂);无需打...
透视辅助!拱趴大菠萝十三水辅助... 透视辅助!拱趴大菠萝十三水辅助,wpk德州局怎么透视,了解开挂辅助软件(透视有挂猫腻)《详细加薇13...
辅助开挂!芒果辅助器,wepo... 辅助开挂!芒果辅助器,wepoker破解工具(透视)开挂辅助脚本(揭秘有挂);大家肯定在之前芒果辅助...
玩家攻略推荐“aapoker怎... 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1、软件助手是一款功...
实测透视"模拟器打开... 实测透视"模拟器打开hhpoker"aapoker透视脚本入口(透视)开挂辅助插件(有挂辅助);亲,...
透视辅助!aapoker发牌逻... 透视辅助!aapoker发牌逻辑,wepoker能不能透视,分享开挂辅助神器(透视的确有挂)wepo...
开挂辅助!微信超级3+1辅助,... 开挂辅助!微信超级3+1辅助,德普之星私人局辅助器(透视)开挂辅助平台(有挂解惑);德普之星私人局辅...
玩家必看科普“wepoker辅... 玩家必看科普“wepoker辅助器激活码”开挂(透视)辅助神器(安装教程新版有挂);无需打开直接搜索...