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

embedded/2024/10/18 18:16:22/

在 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.ppmy.cn/embedded/22635.html

相关文章

Electron中使用Prisma(以SQLite为例)

1、安装 Prisma 打开终端&#xff0c;执行以下命令安装 Prisma CLI&#xff1a; npm install prisma -g 2、初始化 Prisma 项目 在工作目录中执行以下命令来初始化一个新的 Prisma 项目&#xff1a; prisma init 这将创建一个新的文件夹&#xff0c;包含了必要的文件和目…

Springboot自定义注解+aop实现redis自动清除缓存功能

假如我们是一个商家&#xff0c;我们在管理端 设置好菜品之后&#xff0c;每次不同的用户访问我们的菜品&#xff0c;都要查询数据库&#xff0c;当访问者多的时候&#xff0c;会造成数据库的卡顿&#xff0c;所以使用redis进行缓存&#xff0c;这样只需要读取一次数据库&#…

Crowd counting 系列NO.1—CSRNet

CSRNet:Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes 声明&#xff1a;博客是用latex写的&#xff0c;所以直接用图片来展示吧&#xff0c;效果是一样的。下载资源网上都很容易搜到&#xff0c;如需下载资源&#xff0c;请留言。

Oracle 11g 生产库因密码过期修改密码产生library cache lock等待事件导致用户hang问题分析及处理

一、问题描述 这个五一假日&#xff0c;旅游景点真的是人山人海&#xff0c;不是看景而是看人。于是&#xff0c;索性假日就不去景点&#xff0c;就在家附近逛逛。 假日的一天中午&#xff0c;在家附近上场&#xff0c;接到同事打来电话&#xff0c;有个国外点的生产库应用无法…

如何解决 IntelliJ IDEA 2024 启动总闪退问题?一站式解决方案!

&#x1f9e0; 如何解决 IntelliJ IDEA 2024 启动总闪退问题&#xff1f;一站式解决方案&#xff01; 文章目录 &#x1f9e0; 如何解决 IntelliJ IDEA 2024 启动总闪退问题&#xff1f;一站式解决方案&#xff01;摘要引言正文一级标题&#xff1a;检查和优化内存设置一级标题…

场外个股期权开户新规及操作方法

场外个股期权开户新规 场外个股期权开户新规主要涉及对投资者资产实力、专业知识、风险承受能力和诚信记录的要求。以下是根据最新规定总结的关键要点&#xff1a; 来源/&#xff1a;股指研究院 资产门槛&#xff1a;投资者需具备一定的资产实力&#xff0c;确保在申请开户前…

使用 Python 和 Keras 实现卷积神经网络

MNIST数据集 我们将使用另一个著名的数据集——MNIST 数据集。该数据集扩展了其前身 NIST,具有 60,000 个样本的训练集和 10,000 个手写数字图像的测试集。所有数字都已标准化大小并居中。图像的大小也是固定的,因此预处理图像数据被最小化。这就是为什么这个数据集如此受欢…

数据挖掘实验一

一、实验环境及背景 使用软件&#xff1a; Anaconda3 Jupyter Notebook 实验内容&#xff1a; 1.使用Tushare或者其他手段获取任意两支股票近三个月的交易数据。做出收盘价的变动图像。2.使用Pandas_datareader获取世界银行数据库中美国&#xff08;USA&#xff09;、瑞典&…