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

相关内容

热门资讯

烘培辅助!友友联盟辅助器!了解... 烘培辅助!友友联盟辅助器!了解真的有辅助软件(有挂教学)1、上手简单,内置详细流程视频教学,新手小白...
此事备受玩家关注!边锋老友乳山... 此事备受玩家关注!边锋老友乳山辅助(辅助)竟然是有辅助神器(有挂详细)亲,关键说明,边锋老友乳山辅助...
阶段辅助!微信小程序家乡大贰破... 阶段辅助!微信小程序家乡大贰破解版!教你有辅助工具(有挂教程)1、首先打开微信小程序家乡大贰破解版辅...
据统计!789大菠萝挂(辅助)... 据统计!789大菠萝挂(辅助)切实是真的有辅助软件(有挂细节)789大菠萝挂能透视中分为三种模型:7...
方案辅助!熊猫跑得快辅助器!解... 方案辅助!熊猫跑得快辅助器!解密真的是有辅助挂(有挂秘笈)1、熊猫跑得快辅助器免费辅助多个强度级别选...
此事引发广泛关注!广东闲来辅助... 此事引发广泛关注!广东闲来辅助神器免费版(辅助)其实真的有辅助方法(有挂教程)一、广东闲来辅助神器免...
演示辅助!创思维激k辅助器下载... 演示辅助!创思维激k辅助器下载!科普有辅助插件(有挂规律)1)创思维激k辅助器下载免费钻石:进一步探...
记者获悉!衡阳丫丫字牌辅助(辅... 记者获悉!衡阳丫丫字牌辅助(辅助)本来是真的有辅助app(真实有挂)1、全新机制【衡阳丫丫字牌辅助a...
攻略辅助!微乐降序自建房辅助a... 攻略辅助!微乐降序自建房辅助app!专业真的是有辅助技巧(竟然有挂)1、下载好微乐降序自建房辅助ap...
黑科技辅助!微乐小程序微乐房间... 黑科技辅助!微乐小程序微乐房间怎么开挂(辅助)确实存在有辅助教程(有挂解惑)所有人都在同一条线上,像...