C++中常见的容器类使用方法举例(vector、deque、map、set)
cpp中常见的容器类有vector、list、deque、map、set、unordered_map和unordered_set。
下面将举例直接说明各个容器的使用方法。
文章目录
- 综合示例
- 1. vector:动态数组,支持随机访问
- 2. list:双向链表,支持双向遍历和插入删除
- 3. deque:双端队列,支持首尾插入删除和随机访问
- 4. map:红黑树实现的关联数组,支持按键访问和遍历
- 5. set:红黑树实现的集合,支持按值访问和遍历
- 6. unordered_map:哈希表实现的关联数组,支持按键访问和遍历
- 7. unordered_set:哈希表实现的集合,支持按值访问和遍历
- 检索方法示例
- 1. vector:根据下标检索
- 2. deque:根据下标检索
- 3. set:根据值检索
- 4. map:根据值检索
- 5. unordered_set:根据值检索
- 6. unordered_map:根据值检索
综合示例
1. vector:动态数组,支持随机访问
#include <iostream>
#include <vector>using namespace std;int main()
{vector<int> v;// 添加元素v.push_back(1);v.push_back(2);v.push_back(3);// 遍历元素for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;// 访问元素cout << v[0] << endl;cout << v.at(1) << endl;// 删除元素v.erase(v.begin() + 1);// 大小和容量cout << v.size() << endl;cout << v.capacity() << endl;return 0;
}
2. list:双向链表,支持双向遍历和插入删除
#include <iostream>
#include <list>using namespace std;int main()
{list<int> l;// 添加元素l.push_back(1);l.push_back(2);l.push_back(3);l.push_front(0);// 遍历元素for (auto it = l.begin(); it != l.end(); ++it){cout << *it << " ";}cout << endl;// 访问元素cout << l.front() << endl;cout << l.back() << endl;// 删除元素l.pop_front();// 大小cout << l.size() << endl;return 0;
}
3. deque:双端队列,支持首尾插入删除和随机访问
#include <iostream>
#include <deque>using namespace std;int main()
{deque<int> d;// 添加元素d.push_back(1);d.push_front(0);d.push_back(2);// 遍历元素for (auto it = d.begin(); it != d.end(); ++it){cout << *it << " ";}cout << endl;// 访问元素cout << d[0] << endl;cout << d.at(1) << endl;// 删除元素d.pop_front();// 大小cout << d.size() << endl;return 0;
}
4. map:红黑树实现的关联数组,支持按键访问和遍历
#include <iostream>
#include <map>using namespace std;int main()
{map<string, int> m;// 添加元素m["apple"] = 1;m["banana"] = 2;m.insert(make_pair("orange", 3));// 遍历元素for (auto it = m.begin(); it != m.end(); ++it){cout << it->first << " " << it->second << endl;}// 访问元素cout << m["apple"] << endl;// 删除元素m.erase("banana");// 大小cout << m.size() << endl;return 0;
}
5. set:红黑树实现的集合,支持按值访问和遍历
#include <iostream>
#include <set>using namespace std;int main()
{set<int> s;// 添加元素s.insert(1);s.insert(2);s.insert(3);// 遍历元素for (auto it = s.begin(); it != s.end(); ++it){cout << *it << " ";}cout << endl;// 访问元素auto it = s.find(2);if (it != s.end()){cout << *it << endl;}// 删除元素s.erase(3);// 大小cout << s.size() << endl;return 0;
}
6. unordered_map:哈希表实现的关联数组,支持按键访问和遍历
#include <iostream>
#include <unordered_map>using namespace std;int main()
{unordered_map<string, int> um;// 添加元素um["apple"] = 1;um["banana"] = 2;um.insert(make_pair("orange", 3));// 遍历元素for (auto it = um.begin(); it != um.end(); ++it){cout << it->first << " " << it->second << endl;}// 访问元素auto it = um.find("apple");if (it != um.end()){cout << it->second << endl;}// 删除元素um.erase("banana");// 大小cout << um.size() << endl;return 0;
}
7. unordered_set:哈希表实现的集合,支持按值访问和遍历
#include <iostream>
#include <unordered_set>using namespace std;int main()
{unordered_set<int> us;// 添加元素us.insert(1);us.insert(2);us.insert(3);// 遍历元素for (auto it = us.begin(); it != us.end(); ++it){cout << *it << " ";}cout << endl;// 访问元素auto it = us.find(2);if (it != us.end()){cout << *it << endl;}// 删除元素us.erase(3);// 大小cout << us.size() << endl;return 0;
}
检索方法示例
- 根据下标检索的容器类有
vector、deque - 根据值检索的容器类有
set、map、unordered_set、unordered_map
(感觉主要靠容器.find()方法、容器.count()方法或者还可以用algorithm库里面的find)
1. vector:根据下标检索
#include <iostream>
#include <vector>using namespace std;int main()
{vector<int> v = {1, 2, 3};// 访问元素cout << v[0] << endl;cout << v.at(1) << endl;// 判断元素是否在容器内if (v.size() > 0 && v[0] == 1){cout << "1 is in the vector." << endl;}return 0;
}
2. deque:根据下标检索
#include <iostream>
#include <deque>using namespace std;int main()
{deque<int> d = {1, 2, 3};// 访问元素cout << d[0] << endl;cout << d.at(1) << endl;// 判断元素是否在容器内if (d.size() > 0 && d[0] == 1){cout << "1 is in the deque." << endl;}return 0;
}
3. set:根据值检索
#include <iostream>
#include <set>using namespace std;int main()
{set<int> s = {1, 2, 3};// 查找元素auto it = s.find(2);if (it != s.end()){cout << *it << " is in the set." << endl;}// 判断元素是否在容器内if (s.count(1) > 0){cout << "1 is in the set." << endl;}return 0;
}
4. map:根据值检索
#include <iostream>
#include <map>using namespace std;int main()
{map<string, int> m = {{"apple", 1}, {"banana", 2}, {"orange", 3}};// 查找元素auto it = m.find("banana");if (it != m.end()){cout << it->second << " is in the map." << endl;}// 判断元素是否在容器内if (m.count("apple") > 0){cout << "apple is in the map." << endl;}return 0;
}
5. unordered_set:根据值检索
#include <iostream>
#include <unordered_set>using namespace std;int main()
{unordered_set<int> us = {1, 2, 3};// 查找元素auto it = us.find(2);if (it != us.end()){cout << *it << " is in the unordered_set." << endl;}// 判断元素是否在容器内if (us.count(1) > 0){cout << "1 is in the unordered_set." << endl;}return 0;
}
6. unordered_map:根据值检索
#include <iostream>
#include <unordered_map>using namespace std;int main()
{unordered_map<string, int> um = {{"apple", 1}, {"banana", 2}, {"orange", 3}};// 查找元素auto it = um.find("banana");if (it != um.end()){cout << it->second << " is in the unordered_map." << endl;}// 判断元素是否在容器内if (um.count("apple") > 0){cout << "apple is in the unordered_map." << endl;}return 0;
}
相关文章:
C++中常见的容器类使用方法举例(vector、deque、map、set)
cpp中常见的容器类有vector、list、deque、map、set、unordered_map和unordered_set。 下面将举例直接说明各个容器的使用方法。 文章目录综合示例1. vector:动态数组,支持随机访问2. list:双向链表,支持双向遍历和插入删除3. de…...
什么是强缓存和协商缓存
什么是缓存 浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候,如果是相同的URL&#…...
算法刷题之堆
1. heapq 堆 Python 中只有最小堆: import heapqa [] heapq.heappush(a, 3) # 添加元素 heapq.heappush(a, 2) heapq.heappush(a, 1) while len(a): # 判断堆的长度print(heapq.heappop(a)) # 弹出堆顶元素# 将列表转换为最小堆 nums [2, 3, 1, 4, 5, 6] hea…...
javaweb导师选择系统
本文以JSP为开发技术,实现了一个导师选择系统。导师选择系统分为三大模块,包括管理员:学员信息管理、导师信息管理、导师选择管理、导师分布图、公告信息管理、系统管理,学生:个人资料管理、导师选择管理、导师分布图管…...
LeetCode150 逆波兰表达式求值
题目: 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。每个操作数(运算对象)都可以…...
【Node.js】项目开发实战(中)
开发用户的注册和登录接口步骤1,打开MySQL Workbench,打开自己的数据库进入创建用户信息表新建 ev_users表安装并配置mysql模块安装mysql模块新建db文件夹下index.js,导入并配置mysql模块安装bcryptjs对密码进行加密处理新建/router_handler/user.js中&a…...
记录一次 New Bing 英语陪练
记录一次 New Bing 英语陪练 Now I start to speak english to chat with you . Help me find the mistake in my word and help me improve my english I’m glad you want to practice your English with me. I can help you find the mistakes in your words and help you i…...
【Python】照片居然能变素描?不会画画但是咱会代码
文章目录前言一、准备二、下载预训练模型总结前言 Photo-Sketching 一个能将照片的轮廓识别出来并将其转化为“速写”型图像的开源模块。 比如,这只小狗: 经过模型的转化,会变成卡通版的小狗: 非常秀,这很人工智能…...
已解决正确配置git环境变量
已解决git没有配置环境变量,抛出异常ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?,附上正确配置git环境变量的教程 文章目录报错问题报错翻译报错原因解决方法《100天精通Python》专栏推荐白嫖80g Python全栈…...
【逐步剖C】-第十章-自定义类型之结构体、枚举、联合
一、结构体 前言:有关结构体的声明、定义、初始化以及结构体的传参等结构体的基本使用在文章【逐步剖C】-第六章-结构体初阶中已进行了详细的介绍,需要的朋友们可以看看。这里主要讲解的是有关结构体的内存问题。 1. 结构体的内存对齐 (1&…...
Windows Server 2016 中文版、英文版下载 (updated Mar 2023)
Windows Server 2016 Version 1607,2023 年 3 月更新 请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 本站将不定期发布官方原版风格月度更…...
Linux 4G 通信实验
目录4G 网络连接简介高新兴ME3630 4G 模块实验ME3630 4G 模块简介ME3630 4G 模块驱动修改ME3630 4G 模块ppp 联网测试前面我们学习了如何在Linux 中使用有线网络或者WIFI,但是使用有线网络或者WIFI 有 很多限制,因为要布线,即使是WIFI 你也得…...
华为OSPF技术详细介绍,保姆级,谁都能看懂(一)
目录 1、简介 2、OSPF基本原理 3、OSPF的特点 4、OSPF区域 5、路由器的类型 6、OSPF5种报文 7、后半部分内容 1、简介 OSPF(Open Shortest Path First,开放最短路径优先)是一个基于链路状态的内部网关协 议。目前针对IPv4协议使用的是OS…...
行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
摘要:行人车辆检测与计数系统用于交通路口行人及车辆检测计数,道路人流量、车流量智能监测,方便记录、显示、查看和保存检测结果。本文详细介绍行人车辆检测,在介绍算法原理的同时,给出Python的实现代码、PyQt的UI界面…...
SM3哈希算法的FPGA实现 I
SM3哈希算法的FPGA实现 I SM3哈希算法的FPGA实现 I一、什么是SM3哈希算法?二、SM3哈希算法的具体内容1、填充2、迭代与压缩3、计算拼凑值三、参考文档语言 :verilog 仿真工具: Modelsim EDA工具:quartus II 一、什么是SM3哈希算法…...
【数据结构与算法】线性表--数组
文章目录一、前言二、数组的概念三、数组的操作数组的插入数组的删除四、容器与数组五、问题:为何数组要从0开始编号,而不是1开始呢?六、总结一、前言 常见的数据结构如下图,本文主要讲解数据结构线性表--数组。 二、数组的概念 …...
剑指offer排序专题
剑指offer排序专题 jz3 数组中重复的数字描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[…...
已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py
已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py 文章目录报错问题报错翻译报错原因解决方法1:easy_install 来安装pip解决方法2:本地安装pip《100天精通Python》专栏推荐白嫖80g Python全栈视频报错问题 粉丝群里面的一个小伙伴遇到问题…...
3 步走,快速上手 API 接口测试
开始 API 接口测试之前,我们需要弄清接口测试的含义: 接口测试就是根据接口清单,模拟客户端向服务端发送请求数据,并获取响应数据后,查看响应数据是否符合预期的过程。 整个过程可以分为三个步骤: 第一步&…...
爬虫-day1-正则表达式作业
利用正则表达式完成下面的操作: 一、不定项选择题 能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括(ABD ) A. r"\(?\d{3}\)?-?\d{8}" B. r"[0-9()-]" C. r"[0-9(-)]*\d*&…...
Pixel Dimension Fissioner 与3D渲染结合:生成像素风格贴图与法线贴图
Pixel Dimension Fissioner 与3D渲染结合:生成像素风格贴图与法线贴图 1. 效果亮点预览 Pixel Dimension Fissioner在3D图形管线中展现出令人惊喜的适配性。这个工具最吸引人的地方在于,它能将传统像素艺术与现代3D渲染技术无缝结合,创造出…...
燃油车虎视眈眈,电车涨价的图谋必将落空,油价上涨的利好将消失
近期以来多家电车企业涨价,美国电车涨价尤为明显,最高涨幅2万元,而国产电车涨价3000-1.4万元不等,凸显出电车似乎突然间对市场乐观起来,导致他们信心十足的在于3月份以来的油价上涨,但是这种涨价将迅速导致…...
告别DDA!用Python手撸Bresenham画线算法,从原理到实现(附完整源码)
告别DDA!用Python手撸Bresenham画线算法,从原理到实现(附完整源码) 在计算机图形学领域,直线绘制是最基础却至关重要的操作。当你需要开发一个2D图形引擎、像素画工具或是任何需要精确控制像素显示的应用程序时&#x…...
在构建高并发、海量数据的分布式系统时,数据存储与治理是核心挑战。单机数据库的性能瓶颈、ID 冲突、历史数据膨胀等问题,都需要通过架构层面的设计来解决
在构建高并发、海量数据的分布式系统时,数据存储与治理是核心挑战。单机数据库的性能瓶颈、ID 冲突、历史数据膨胀等问题,都需要通过架构层面的设计来解决。 以下结合具体业务场景,深度解析分布式 ID、分库分表、数据迁移与冷热分离的内部机制…...
告别格式烦恼:哈工大深圳LaTeX论文模板的6大核心优势
告别格式烦恼:哈工大深圳LaTeX论文模板的6大核心优势 【免费下载链接】hitszthesis A dissertation template for Harbin Institute of Technology, ShenZhen (HITSZ), including bachelor, master and doctor dissertations. 项目地址: https://gitcode.com/gh_m…...
DeOldify图像上色服务技术解析:其背后的卷积神经网络架构
DeOldify图像上色服务技术解析:其背后的卷积神经网络架构 老照片上色,听起来像是个魔法。你可能见过一些黑白照片瞬间变得色彩鲜艳的对比图,感觉既神奇又有点不可思议。DeOldify就是这样一个能把“魔法”变成现实的开源工具,它能…...
数智驱动 人才筑基——拔尖创新人才与卓越工程师培养论坛举行
3月22日,第二届高等院校新工科人才培养暨产教融合发展大会在北京举行。大会以“科技创新 智造未来”为主题,来自全国各地的本科院校、职业院校、行业企业以及媒体等1000余位嘉宾参会。22日下午,数智驱动 人才筑基——拔尖创新人才与卓越工程师…...
GraphRAG:当 RAG 遇上知识图谱,信息检索从此不一样了
假设你把公司过去三年的所有周报、会议纪要、项目文档丢进一个 RAG 系统,然后问它:“过去一年里,研发团队和产品团队之间的主要分歧有哪些?”——大概率你会得到几段看起来相关的文字片段,但拼不出一个完整的答案。 这…...
SDMatte在电商场景落地:商品主图自动去背景+透明PNG生成完整工作流
SDMatte在电商场景落地:商品主图自动去背景透明PNG生成完整工作流 1. 电商场景中的图像处理痛点 在电商运营中,商品主图的质量直接影响转化率。传统处理方式面临三大难题: 人工成本高:专业设计师处理一张图平均耗时15-30分钟边…...
2026年多模态AI前瞻:Qwen3-VL-2B开源生态发展潜力分析
2026年多模态AI前瞻:Qwen3-VL-2B开源生态发展潜力分析 1. 项目概述与核心价值 Qwen3-VL-2B-Instruct作为新一代开源视觉语言模型,代表了多模态AI技术的重要发展方向。这个模型不仅能够理解文本,更重要的是具备了"看"的能力——它…...
