C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结
最近用set比较多,复习一下基础。
在C++中,vector、deque、list、set、multiset、unordered_set和unordered_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;
}
相关文章:
C++中,vector、deque、list、set、multiset、unordered_set和unordered_multiset容器类的总结
最近用set比较多,复习一下基础。 在C中,vector、deque、list、set、multiset、unordered_set和unordered_multiset都是容器类,但它们有不同的特点和用途。下面是对它们的区别和示例说明: 1. vector 特点: 动态数组,…...
Python处理Redis
操作Redis redis也是基于tcp通信的,所以我们可以直接通过socket来做 Redis通信过程 简单使用 redis-cli.exe -h192.168.56.188 auth 123456 set name myredis get name lindex students 0 # 查看students列的第一条数据核心协议体 *2 # 表示下述的指令由2个字符…...
nodejs多版本随心切换-windows
nodejs多版本控制 1. 安装 nvm github下载地址 不需要卸载已安装的nodejs,安装时会让你选择nodejs的位置,可修改为你已经安装的路径,会自动搜索已安装版本,并进行弹窗询问,选择托管即可 2. 修改配置文件 在 nvm 安装…...
json文件格式
json文件格式 格式介绍1格式介绍2格式3 格式介绍1 格式介绍2 格式3 参考地址...
日撸Java三百行(day15:栈的应用之括号匹配)
目录 一、栈的括号匹配 二、代码实现 1.方法创建 2.数据测试 3.完整的程序代码 总结 一、栈的括号匹配 要完成今天的任务,需要先来了解一下什么是栈的括号匹配。首先,顾名思义,括号匹配就是指将一对括号匹配起来,我们给定一…...
Oracle-OracleConnector
提示:OracleConnector 类是 Debezium 中用于与 Oracle 数据库交互的一个连接器组件 文章目录 前言一、核心功能二、代码分析总结 前言 提示:OracleConnector 类负责配置、启动、管理和验证与 Oracle 数据库的连接,并为后续的数据捕获任务准备…...
『 Linux 』线程池与 POSIX 线程的封装编码实现
文章目录 线程池概念线程池的编码实现线程池的测试参考代码 线程的封装使用测试封装后的线程参考代码 线程池概念 池化技术是一种资源管理方法,通过预先创建和管理一组资源以便在需要使用时快速分配这些资源; 线程池是池化技术的一种典型应用; 资源分配 在线程池中预先创建一定…...
【C++】————哈希表
作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年8月6日 前言: 在计算机科学的广袤世界中,数据结构犹如基石,支撑着各种高效算法的构建与运行。而哈希表(Hash Table)&#…...
前端学习AI历程
AI基本概念tensorflow入门conda搭建环境,pycham使用训练自己的第一个模型AI目前前端方便入手的几个方向 素材图片库图像识别,在线学习低代码应用智能客服 获取数据集 roboflowkagglecocomakesense(用于打标) 认识yolo两个简单小应…...
常见中间件漏洞复现之【Tomcat】!
Tomcat介绍 tomcat是⼀个开源⽽且免费的jsp服务器,默认端⼝ : 8080,属于轻量级应⽤服务器。它可以实现 JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的⼀款环境。 在历史上也披露出来了很多的漏洞 …...
C++并发编程(一):线程基础
简介 本文学习的是 b 站 up 恋恋风辰的并发编程教学视频做的一些笔记补充。 教程视频链接如下:线程基础:视频教程 文档链接如下:线程基础:笔记文档 理论上直接看 up 提供的笔记文档即可,我这里主要是记录一些我自己…...
enq: HW - contention事件来啦
业务系统反应数据库慢,根据时间查看awr报告。 先看一眼事件名称 HW enqueue 用于序列化超出段高水位线的空间分配。如果同时向对象添加大量数据,则多个进程可能同时尝试在高水位线上方分配空间,从而导致争用。 既然是控制资源并发的enq&…...
MyBatis补充
控制类和dao层接口以及mapper中的xml是怎样的关联的? 在Mybatis中,控制类和dao层接口是通过mapper的xml文件进行连接的。 控制类调用dao层接口中的方法,通过接口实现进行访问数据库操作。dao层接口定义数据库操作的方法,提供给控制…...
系统架构师(每日一练16)
每日一练 答案与解析 1.软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括()等方法。答案与解析 问题1 A.边界值分析、逻辑覆盖、基本路径 B.桌面检查、…...
实践致知第17享:电脑忽然黑屏的常见原因及处理方法
一、背景需求 小姑电话说:最近,电脑忽然就黑屏了(如下图所示),但是等待几十秒甚至一分钟,电脑就能自然恢复了,这种状况一天能出现三四次,怎么办? 二、分析诊断 电脑黑屏…...
微信小程序--实现地图定位---获取经纬度
(1) (2) (3) html: <view class"titleTwo" style"border: none;"><view class"fontSize30 invoiceTile">企业地址</view><view class"invoiceRight" bind:tap"tapChooseAddress" data-maptype"…...
【Python系列】使用 `isinstance()` 替代 `type()` 函数
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【多模态大模型】 BLIP-2 in ICML 2023
一、引言 论文: BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models 作者: Salesforce Research 代码: BLIP-2 特点: 该方法分别使用冻结的图像编码器(ViT-L/…...
HPC高性能计算平台
随着技术的发展和数据量的爆炸性增长,企业面临的挑战日益复杂,对计算能力的需求也在不断增加。这些问题的解决超出了传统计算方法的能力范围,高性能计算(HPC)正是为解决这类问题而生。 高性能计算(HPC&…...
前端常用的几个工具网站
觉得不错的前端工具类网站 1、Grid布局生成 https://cssgrid-generator.netlify.app 2、拟物按钮样式生成 https://neumorphism.io 3、玻璃形态效果 在线制作CSS玻璃形态 4、一些Button、checkBox、switch、card的css样式 零代码 - 精美CSS样式库 5、CSS阴影生成 在线创建…...
构建企业级工业可视化监控系统:FUXA在生产环境的高效部署方案
构建企业级工业可视化监控系统:FUXA在生产环境的高效部署方案 【免费下载链接】FUXA Web-based Process Visualization (SCADA/HMI/Dashboard) software 项目地址: https://gitcode.com/gh_mirrors/fu/FUXA 在数字化转型浪潮中,工业企业面临设备数…...
如何用QtScrcpy实现Android设备实时投屏:终极免费解决方案
如何用QtScrcpy实现Android设备实时投屏:终极免费解决方案 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...
TMSpeech:Windows平台离线语音转文字的终极解决方案
TMSpeech:Windows平台离线语音转文字的终极解决方案 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而手忙脚乱吗?还在为在线课程笔记而烦恼吗?今天我要向你介绍一…...
MambaOut部署指南:本地、云端和边缘设备的完整解决方案
MambaOut部署指南:本地、云端和边缘设备的完整解决方案 【免费下载链接】MambaOut MambaOut: Do We Really Need Mamba for Vision? (CVPR 2025) 项目地址: https://gitcode.com/gh_mirrors/ma/MambaOut MambaOut是一个高效的计算机视觉模型,它通…...
Venera漫画应用:开源漫画聚合阅读器的完整实战指南
Venera漫画应用:开源漫画聚合阅读器的完整实战指南 【免费下载链接】venera A comic app 项目地址: https://gitcode.com/gh_mirrors/ve/venera 在数字漫画阅读的广阔世界里,你是否曾为寻找一款既能阅读本地漫画、又能聚合全网资源的应用而烦恼&a…...
基于STM32LXXX的数字电位器(TPL1401DSGR)驱动应用程序设计
一、简介: TPL1401DSGR 是 TI 带输出缓冲器的数字电位器,相比普通数字电位器,其缓冲输出能保证负载改变时电压不跌落,非常适合作为可编程电压源使用。 二、主要技术特性: 抽头数:256(8bit 分辨率) 接口:I2C(支持 1MHz Fast+ 模式) 工作电压:1.8V ~ 5.5V(与 STM…...
SEAL库CKKS实战:手把手教你调参避开‘scale out of bounds’报错(附8192模数配置)
SEAL库CKKS实战:手把手教你调参避开‘scale out of bounds’报错(附8192模数配置) 在同态加密的实际应用中,微软SEAL库的CKKS方案因其支持浮点数运算的特性而备受开发者青睐。然而,许多初入门的开发者在尝试实现复杂计…...
那些你不知道自己需要监控的 Linux 暗坑期
我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...
Python 3D游戏开发实战:Ursina引擎从入门到精通
1. 为什么选择Ursina引擎开发3D游戏 如果你正在寻找一个简单易用的Python 3D游戏引擎,Ursina绝对值得一试。作为一个基于Panda3D的轻量级封装,Ursina让3D游戏开发变得前所未有的简单。我最初接触它时,就被它简洁的API设计所吸引——用不到10行…...
从LSB到MSB:位平面分割在图像隐写与压缩中的实战解析
1. 什么是位平面分割? 第一次听说"位平面分割"这个词时,我也是一头雾水。直到有一天我在处理一张老照片时,发现即使删除了某些数据,照片看起来依然清晰,这才恍然大悟。位平面分割(Bit-Plane Sli…...
