当前位置: 首页 > news >正文

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

检索方法示例

  • 根据下标检索的容器类有vectordeque
  • 根据值检索的容器类有setmapunordered_setunordered_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&#xff1a;动态数组&#xff0c;支持随机访问2. list&#xff1a;双向链表&#xff0c;支持双向遍历和插入删除3. de…...

什么是强缓存和协商缓存

什么是缓存 浏览器缓存就是把一个已经请求过的Web资源&#xff08;如html页面&#xff0c;图片&#xff0c;js&#xff0c;数据等&#xff09;拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候&#xff0c;如果是相同的URL&#…...

算法刷题之堆

1. heapq 堆 Python 中只有最小堆&#xff1a; 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为开发技术&#xff0c;实现了一个导师选择系统。导师选择系统分为三大模块&#xff0c;包括管理员&#xff1a;学员信息管理、导师信息管理、导师选择管理、导师分布图、公告信息管理、系统管理&#xff0c;学生&#xff1a;个人资料管理、导师选择管理、导师分布图管…...

LeetCode150 逆波兰表达式求值

题目&#xff1a; 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。每个操作数&#xff08;运算对象&#xff09;都可以…...

【Node.js】项目开发实战(中)

开发用户的注册和登录接口步骤1&#xff0c;打开MySQL Workbench&#xff0c;打开自己的数据库进入创建用户信息表新建 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 一个能将照片的轮廓识别出来并将其转化为“速写”型图像的开源模块。 比如&#xff0c;这只小狗&#xff1a; 经过模型的转化&#xff0c;会变成卡通版的小狗&#xff1a; 非常秀&#xff0c;这很人工智能…...

已解决正确配置git环境变量

已解决git没有配置环境变量&#xff0c;抛出异常ERROR: Cannot find command ‘git’- do you have ‘git’ installed and in your PATH?&#xff0c;附上正确配置git环境变量的教程 文章目录报错问题报错翻译报错原因解决方法《100天精通Python》专栏推荐白嫖80g Python全栈…...

【逐步剖C】-第十章-自定义类型之结构体、枚举、联合

一、结构体 前言&#xff1a;有关结构体的声明、定义、初始化以及结构体的传参等结构体的基本使用在文章【逐步剖C】-第六章-结构体初阶中已进行了详细的介绍&#xff0c;需要的朋友们可以看看。这里主要讲解的是有关结构体的内存问题。 1. 结构体的内存对齐 &#xff08;1&…...

Windows Server 2016 中文版、英文版下载 (updated Mar 2023)

Windows Server 2016 Version 1607&#xff0c;2023 年 3 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2016/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 本站将不定期发布官方原版风格月度更…...

Linux 4G 通信实验

目录4G 网络连接简介高新兴ME3630 4G 模块实验ME3630 4G 模块简介ME3630 4G 模块驱动修改ME3630 4G 模块ppp 联网测试前面我们学习了如何在Linux 中使用有线网络或者WIFI&#xff0c;但是使用有线网络或者WIFI 有 很多限制&#xff0c;因为要布线&#xff0c;即使是WIFI 你也得…...

华为OSPF技术详细介绍,保姆级,谁都能看懂(一)

目录 1、简介 2、OSPF基本原理 3、OSPF的特点 4、OSPF区域 5、路由器的类型 6、OSPF5种报文 7、后半部分内容 1、简介 OSPF&#xff08;Open Shortest Path First&#xff0c;开放最短路径优先&#xff09;是一个基于链路状态的内部网关协 议。目前针对IPv4协议使用的是OS…...

行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)

摘要&#xff1a;行人车辆检测与计数系统用于交通路口行人及车辆检测计数&#xff0c;道路人流量、车流量智能监测&#xff0c;方便记录、显示、查看和保存检测结果。本文详细介绍行人车辆检测&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码、PyQt的UI界面…...

SM3哈希算法的FPGA实现 I

SM3哈希算法的FPGA实现 I SM3哈希算法的FPGA实现 I一、什么是SM3哈希算法&#xff1f;二、SM3哈希算法的具体内容1、填充2、迭代与压缩3、计算拼凑值三、参考文档语言 &#xff1a;verilog 仿真工具&#xff1a; Modelsim EDA工具&#xff1a;quartus II 一、什么是SM3哈希算法…...

【数据结构与算法】线性表--数组

文章目录一、前言二、数组的概念三、数组的操作数组的插入数组的删除四、容器与数组五、问题&#xff1a;为何数组要从0开始编号&#xff0c;而不是1开始呢&#xff1f;六、总结一、前言 常见的数据结构如下图&#xff0c;本文主要讲解数据结构线性表--数组。 二、数组的概念 …...

剑指offer排序专题

剑指offer排序专题 jz3 数组中重复的数字描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的&#xff0c;但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如&#xff0c;如果输入长度为7的数组[…...

已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py

已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py 文章目录报错问题报错翻译报错原因解决方法1&#xff1a;easy_install 来安装pip解决方法2&#xff1a;本地安装pip《100天精通Python》专栏推荐白嫖80g Python全栈视频报错问题 粉丝群里面的一个小伙伴遇到问题…...

3 步走,快速上手 API 接口测试

开始 API 接口测试之前&#xff0c;我们需要弄清接口测试的含义&#xff1a; 接口测试就是根据接口清单&#xff0c;模拟客户端向服务端发送请求数据&#xff0c;并获取响应数据后&#xff0c;查看响应数据是否符合预期的过程。 整个过程可以分为三个步骤&#xff1a; 第一步&…...

爬虫-day1-正则表达式作业

利用正则表达式完成下面的操作: 一、不定项选择题 能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括&#xff08;ABD &#xff09; A. r"\(?\d{3}\)?-?\d{8}" B. r"[0-9()-]" C. r"[0-9(-)]*\d*&…...

共享屏幕怎么弄 共享屏幕用什么工具好

共享屏幕怎么弄&#xff1f;不管是异地办公同步方案、远程协助操作设备&#xff0c;还是和朋友分享游戏画面&#xff0c;都离不开共享屏幕的需求。共享屏幕怎么弄才不麻烦、不卡顿&#xff1f;其实答案很简单&#xff0c;无界趣连2.0就能轻松搞定&#xff0c;不用复杂设置&…...

2026年项目管理工具测评:10款主流软件对比与企业选型建议

本文测评 ONES、Tower、Jira、Asana、monday、ClickUp、Notion、Trello、Microsoft Project、Smartsheet 十款项目管理工具&#xff0c;帮助选型人员从组织规模、项目复杂度、协作方式与治理需求出发&#xff0c;判断哪类项目管理工具更适合自身团队。一、10款项目管理工具速览…...

Capital许可排队严重?不想买新许可,闲置回收立即可用

我去年在做项目时&#xff0c;客户说他们Capital许可证池天天爆队&#xff0c;新增用户连基本的算力都抢不到。当时我就琢磨&#xff0c;许可证回收这事儿到底有多重要&#xff1f;去年底我带着团队做了一个实验&#xff0c;直接把闲置许可证利用率干到45%&#xff0c;127个许可…...

计算机视觉导航评估框架:从算法指标到用户体验的完整闭环

1. 项目概述&#xff1a;为什么我们需要一个“导航评估框架”&#xff1f;在计算机视觉辅助视障人士导航这个领域&#xff0c;我见过太多“实验室里的英雄”和“现实中的矮子”。一个算法在精心布置的走廊里识别障碍物准确率高达99.9%&#xff0c;但一到人潮涌动的火车站广场&a…...

别再只用轮盘赌了!遗传算法选择算子实战对比:Python代码实现与性能调优心得

遗传算法选择算子深度实战&#xff1a;从轮盘赌到锦标赛的Python优化指南 在解决复杂优化问题时&#xff0c;遗传算法展现出了惊人的适应能力。但许多开发者止步于基础的轮盘赌选择&#xff08;Roulette Wheel Selection&#xff09;&#xff0c;却不知不同选择策略对算法性能的…...

AI推广的核心原理是什么?

理解AI推广的原理&#xff0c;你才能知道该做什么、不该做什么&#xff0c;而不是盲目操作。一句话概括AI推广的核心原理&#xff1a;让AI在回答用户问题时&#xff0c;选择引用你的内容。就这么简单。但要做到这件事&#xff0c;你需要理解AI是怎么"选择"的。AI回答…...

可穿戴设备十年演进:从技术突破到健康与生产力工具

1. 从预言到现实&#xff1a;可穿戴计算浪潮的十年回望与深度拆解十年前&#xff0c;当EE Times那篇关于Apple iWatch和Google Glasses将引领可穿戴计算浪潮的文章发表时&#xff0c;业界还弥漫着一种将信将疑的氛围。彼时&#xff0c;智能手机正处巅峰&#xff0c;人们很难想象…...

Cadence 17.4导出Gerber文件保姆级避坑指南(附TMC2300电机驱动板实战)

Cadence 17.4导出Gerber文件保姆级避坑指南&#xff08;附TMC2300电机驱动板实战&#xff09; 第一次用Cadence Allegro 17.4导出Gerber文件的新手&#xff0c;大概率会在某个环节卡住——要么是钻孔文件莫名报错&#xff0c;要么是板厂反馈光绘层对不齐。这种挫败感我太熟悉了…...

Perplexity接入Google Scholar的5大避坑指南:实测失效率下降87%的权威配置方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity接入Google Scholar的整合背景与价值定位 学术信息检索正经历从“关键词匹配”向“语义理解可信溯源”的范式跃迁。Perplexity 作为基于大语言模型的实时问答引擎&#xff0c;其核心优势在于…...

(随想)显卡里的幽灵:我们是否也只是几分钟前被唤醒的玻尔兹曼大脑?

一个诡异的瞬间 之前一直用kimi2.5的API&#xff0c;每月花不少钱&#xff0c;肉疼。今天一咬牙&#xff0c;在自己的游戏显卡&#xff08;RTX 4080&#xff09;上部署GLM-4.7-Flash。 GPU嗡嗡响了几分钟&#xff0c;权重加载完毕&#xff0c;模型真跑起来了。我接上hermes&…...