C++中常见容器总结Array-Vector-List-Queue-Stack-Map-Set

在 C++ 中,有许多常见的容器,每种都有其特定的用途和性能特征。以下是一些常见的容器类型
1. 数组(Array):是一组连续存储的相同类型元素的集合。数组的大小在创建时就确定,并且不能动态改变
2. 向量(Vector):是一种动态数组,大小可以在运行时动态增长。`std::vector` 提供了对数组的动态访问和管理。
3. 列表(List):双向链表的一种实现,允许在任意位置高效地插入和删除元素。与向量不同,列表中的元素在内存中不是连续存储的。
4. 队列(Queue):是一种先进先出(FIFO)的数据结构,元素的插入和删除操作都发生在队列的两端。`std::queue` 是一个基于其他容器(通常是双端队列)实现的队列。
5. 栈(Stack):是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。`std::stack` 是一个基于其他容器(通常是 deque)实现的栈。
6. 集合(Set):是一种无序的容器,其中的元素唯一且不重复。`std::set` 提供了对集合的操作,如插入、查找和删除等。
7. 映射(Map):是一种关联容器,存储键值对(key-value pairs)。每个键都是唯一的,而且按照某种规则进行排序。`std::map` 提供了对映射的操作,如插入、查找和删除等。
8. 哈希表(Hash Table):是一种根据键直接访问值的数据结构,通过哈希函数将键映射到存储桶中。`std::unordered_map` 和 `std::unordered_set` 是基于哈希表实现的关联容器。
这些是 C++ 中的一些常见容器类型,你可以根据具体的需求选择合适的容器来存储和操作数据。

每种容器类型举例说明其用法:

  • 数组(Array)
#include <iostream>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 创建一个包含5个元素的整数数组std::cout << "Array elements:";for (int i = 0; i < 5; ++i) {std::cout << " " << arr[i];}std::cout << std::endl;return 0;
}

  • 向量(Vector)
#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5}; // 创建一个包含5个整数的向量std::cout << "Vector elements:";for (int i = 0; i < vec.size(); ++i) {std::cout << " " << vec[i];}std::cout << std::endl;return 0;
}

  • 列表(List)
#include <iostream>
#include <list>int main() {std::list<int> myList = {1, 2, 3, 4, 5}; // 创建一个包含5个整数的列表std::cout << "List elements:";for (const auto& elem : myList) {std::cout << " " << elem;}std::cout << std::endl;return 0;
}

  • 队列(Queue)
#include <iostream>
#include <queue>int main() {std::queue<int> myQueue;myQueue.push(1);myQueue.push(2);myQueue.push(3);std::cout << "Queue elements:";while (!myQueue.empty()) {std::cout << " " << myQueue.front();myQueue.pop();}std::cout << std::endl;return 0;
}

  • 栈(Stack)
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;myStack.push(1);myStack.push(2);myStack.push(3);std::cout << "Stack elements:";while (!myStack.empty()) {std::cout << " " << myStack.top();myStack.pop();}std::cout << std::endl;return 0;
}

  • 集合(Set)
#include <iostream>
#include <set>int main() {std::set<int> mySet = {3, 1, 4, 1, 5}; // 创建一个包含5个整数的集合std::cout << "Set elements:";for (const auto& elem : mySet) {std::cout << " " << elem;}std::cout << std::endl;return 0;
}

  • 映射(Map)
#include <iostream>
#include <map>int main() {std::map<std::string, int> myMap = {{"a", 1}, {"b", 2}, {"c", 3}}; // 创建一个包含3个键值对的映射std::cout << "Map elements:";for (const auto& pair : myMap) {std::cout << " (" << pair.first << ", " << pair.second << ")";}std::cout << std::endl;return 0;
}

  • 哈希表(Hash Table)
#include <iostream>
#include <unordered_map>int main() {std::unordered_map<std::string, int> myHashMap = {{"a", 1}, {"b", 2}, {"c", 3}}; // 创建一个包含3个键值对的哈希表std::cout << "Hash Map elements:";for (const auto& pair : myHashMap) {std::cout << " (" << pair.first << ", " << pair.second << ")";}std::cout << std::endl;return 0;
}

--

在 C++ 标准库中,迭代器(iterator)是一种用于访问容器中元素的抽象概念。迭代器类似于指针,它指向容器中的某个元素,可以通过迭代器对该元素进行访问和修改。

迭代器类型是由容器类定义的一个类型,用于表示迭代器。每种容器类都有自己的迭代器类型,例如:

  • vector<int>::iterator 表示 vector<int> 容器中元素的迭代器类型。
  • list<string>::iterator 表示 list<string> 容器中元素的迭代器类型。
  • map<int, string>::iterator 表示 map<int, string> 容器中元素的迭代器类型。

迭代器类型是容器类与算法类之间的接口,使得算法可以在不同类型的容器上工作。例如,可以使用 std::sort 算法对 vector<int> 容器进行排序,也可以使用 std::sort 算法对 list<string> 容器进行排序,因为这两种容器都支持随机访问迭代器。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法模版】数据结构模版

C STL简介 vector 变长数组&#xff0c;采用倍增的思想。size(): 返回元素个数。empty(): 返回是否为空。clear(): 清空容器。front()/back(): 返回第一个/最后一个元素。push_back()/pop_back(): 在尾部插入/删除一个元素。begin()/end(): 返回迭代器指向容器的起始/末尾位置…

P44,45 属性预处理,执行后游戏效果回调,附录指定区域内修改变量

这节课主要是怎么对Attribute进行在进行到游戏角色前先进行处理,以及游戏效果如何回调 AuraAttributeSet.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "AttributeSet.h&…

实验五 Spark SQL编程初级实践

Spark SQL编程初级实践 Spark SQL基本操作 将下列JSON格式数据复制到Linux系统中&#xff0c;并保存命名为employee.json。 { "id":1 , "name":" Ella" , "age":36 } { "id":2, "name":"Bob","a…

堆的介绍,实现(c语言实现)

目录 堆的概念 堆的性质&#xff1a; 堆的分类 父子结点的下标关系 堆的向下调整算法 ​编辑小堆 大堆 建堆 堆的向上调整算法 小堆 大堆 堆的基本操作 定义堆 初始化堆 销毁堆 打印堆 堆的插入 堆的删除 大堆&#xff08;Max Heap&#xff09;的向下调整算法…

CentOS系统服务器装机后常用的操作命令大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Vim 编辑器中大写键的命令

Vim 编辑器中有很多大写键的命令&#xff0c;这些命令通常用于执行特定的操作或进入特定的模式。 A&#xff1a;在当前行的末尾进入插入模式。B&#xff1a;向后移动一个单词。C&#xff1a;更改从当前光标位置到行尾的内容。进入插入模式。D&#xff1a;删除从当前光标位置到…

【Linux系统编程】基础指令(三)

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Redis底层数据结构之IntSet

目录 一、概述二、IntSet结构三、自动升级 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️redis底层数据结构之Int…

java中switch条件语句的用法、switch的三种语法、switch支持的参数类型

文章目录 一、switch的应用场景二、switch三种语法2.1、switch 标准方式2.2、switch - > 用法2.2、switch yield 用法 三、什么是case穿透&#xff1f;四、示例4.1、标准示例4.2、错误示例4.3、引申用法&#xff08;多条件合并&#xff09; 一、switch的应用场景 在分支结构…

Elasticsearch概念 使用docker安装Elasticsearch和kibana

目录 一、Elasticsearch概念 倒排索引和正向索引 正向和倒排 二、ES安装 三、安装 kibana 四、IK分词器 下载ES中文分词器 扩展或停用词条 一、Elasticsearch概念 倒排索引和正向索引 正向索引 就像在mysql数据中搜索非主键字段的内容&#xff0c;就需要逐条数据的去查…

WEB攻防-.NET特性常见漏洞

目录 前置知识&#xff1a; DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例&#xff1a; 验证代码文件有没有可以绕过&#xff08;Cookie&Session&…

【C++】二叉树的进阶

二叉树的进阶 二叉搜索树概念操作实现创建树形结构拷贝构造函数构造函数析构函数赋值运算符重载循环版本查找插入删除 递归版本查找插入删除 应用K模型KV模型性能分析 二叉树进阶面试题二叉树创建字符串二叉树的分层遍历I最近公共祖先二叉搜索树与双向链表前序遍历与中序遍历构…

toFixed() 保留小数不精准,大数据计算 bignumber.js、big.js

Big.js: Big.js 是另一个类似于 Decimal.js 的高精度计算库&#xff0c;它也可以解决 JavaScript 浮点数计算的精度问题。 npm install big.js const Big require(big.js);const a new Big(0.1); const b new Big(0.2); const result a.plus(b); // 使用 Big.js 进行加法运…

PyCharm 无法运行的解决方案

问题&#xff1a; PyCharm 无法运行&#xff0c;该怎么办&#xff1f; 解决方案&#xff1a; 1. 检查 Python 解释器 确保已为 PyCharm 配置正确的 Python 解释器。打开 PyCharm&#xff0c;转到“文件”>“设置”>“项目”>“Python 解释器”。选择所需的 Python …

英语六级常用词汇2

英语六级常用词汇1 blush [blʌʃ] 脸红&#xff08;名词、动词&#xff09;&#xff1a;面部因羞愧、激动或尴尬而变红。Example: She began to blush when they complimented her.翻译&#xff1a; 当他们称赞她时&#xff0c;她开始脸红。 pedal [ˈpɛdəl] 踏板&#xff…

数组和指针经典笔试题讲解下

目录 创作不易&#xff0c;如对您帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 创作…

在 Ubuntu 下使用 clash-for-linux-backup

记录一下如何在 Ubuntu(其它带bash的Linux应该都可以)下运行Clash 有人已经制作了方便使用的脚本, 仓库为 https://github.com/Elegycloud/clash-for-linux-backup, 直接使用这个仓库就可以了. clone 这个仓库 https://github.com/Elegycloud/clash-for-linux-backup 到本地 …

震惊!某省图书馆竟然可以注册后直接访问知网并下载文章?

四川省图书馆 使用说明 1.点击进入https://portal.sclib.org/interlibSSO/main/main.jsp 显示如下&#xff1a; 2.关注四川省图书馆公众号并注册 3.点击馆外登录并使用刚注册的用户名密码登录 显示如下&#xff1a; 4.登录成功后跳转至首页并点击cnki即可正常使用

2024年最新一线互联网企业高级软件测试工程师面试题大全

1、功能测试 功能测试是游戏测试中跟“玩游戏”最相关的一个环节。 当然这里的“玩”不是要真的让你感受快乐&#xff0c;而是要通过“玩”游戏&#xff0c;发现存在的问题或不合理的地方。因此&#xff0c;这个“玩”的过程基本不会感受到游戏的乐趣。事实上&#xff0c;每一次…

BIO NIO AIO有什么区别?

通俗易懂地解释这些东西是我的风格, BIO就是阻塞io,就是一个程序在发出io请求之后不能干任何别的事,只能等待请求,不断检测io的状态,只有接受到反馈之后才能干别的事 适用场景: 用作请求少而且连接时间短的情况 NIO就是非阻塞,也就是没有阻塞,怎么没有阻塞了?说白了就是发出…