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

【入门级-C++程序设计:13、STL 模板:栈(stack)、队 列(queue)、 链 表(list)、 向 量(vector) 等容器】

C++ STL(标准模板库)提供了多种容器,方便开发者高效地管理数据。下面介绍几种常用的容器:栈 (stack)、队列 (queue)、链表 (list) 和向量 (vector)。
1、栈 (stack)
是一种后进先出 (LIFO) 的容器适配器,只能从栈顶插入和删除元素。
举例说明:
#include // 栈头文件
#include
int main() {
std::stack myStack;
// 入栈
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 获取栈顶元素
std::cout << "栈顶元素: " << myStack.top() << std::endl; // 30
// 出栈
myStack.pop(); // 删除栈顶元素
// 栈的大小
std::cout << "栈的大小: " << myStack.size() << std::endl; // 2
return 0;
}

2、队列 (queue)
是一种先进先出 (FIFO) 的容器适配器,只能从队尾插入元素,从队头删除元素。
举例说明:
#include // 队列头文件
#include
int main() {
std::queue myQueue;
// 入队
myQueue.push(10);
myQueue.push(20);
myQueue.push(30);
// 获取队头元素
std::cout << "队头元素: " << myQueue.front() << std::endl; // 10
// 出队
myQueue.pop(); // 删除队头元素
// 获取队尾元素
std::cout << "队尾元素: " << myQueue.back() << std::endl; // 30
return 0;
}

3、链表 (list)
是双向链表,在任意位置插入和删除元素效率高,但随机访问效率低。
举例说明:
#include //链表头文件
#include
int main() {
std::list myList;
// 插入元素
myList.push_back(10); // 尾部插入
myList.push_front(5); // 头部插入
myList.insert(++myList.begin(), 7); // 在指定位置插入
// 遍历元素
for (auto it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl; // 输出: 5 7 10
// 删除元素
myList.erase(myList.begin()); // 删除第一个元素
return 0;
}

4、向量 (vector)
是最常用的容器之一,它是一个动态数组,支持快速随机访问,在尾部插入和删除元素效率高。
举例说明:
#include //向量头文件
#include
int main() {
// 创建一个vector容器
std::vector vec;
// 尾部插入元素
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);
// 访问元素
std::cout << "第二个元素: " << vec[1] << std::endl;
// 遍历元素
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
// 删除尾部元素
vec.pop_back();
return 0;
}

选择建议
如果需要快速随机访问,且主要在尾部操作元素,选择 vector。
如果需要频繁在任意位置插入和删除元素,选择 list。
如果需要遵循后进先出的操作方式,选择 stack。
如果需要遵循先进先出的操作方式,选择 queue。
这些容器都包含在相应的头文件中,使用时需要包含对应的头文件,如 、 等。它们都支持一些通用操作,如 size() 获取大小,empty() 判断是否为空等。

http://www.dtcms.com/a/330999.html

相关文章:

  • gitlab的ci/cd变量如何批量添加
  • 【P81 10-7】OpenCV Python【实战项目】——车辆识别、车流统计(图像/视频加载、图像运算与处理、形态学、轮廓查找、车辆统计及显示)
  • 智能清扫新纪元:有鹿机器人如何用AI点亮我们的城市角落
  • Streamlit实现Qwen对话机器人
  • CVPR 2025 | 机器人操控 | RoboGround:用“掩码”中介表示,让机器人跨场景泛化更聪明
  • GaussDB数据库架构师修炼(十六) 如何选择磁盘
  • Helm-K8s包管理(三)新建、编辑一个Chart
  • k8s+isulad 重装
  • Seata学习(三):Seata AT模式练习
  • CMake语法与Bash语法的区别
  • 解剖HashMap的put <三> JDK1.8
  • 会议系统进程池管理:初始化、通信与状态同步详解
  • 从 Notion 的水土不服到 Codes 的本土突围:研发管理工具的适性之道​
  • Apache 虚拟主机配置冲突导致 404 错误的排查总结
  • [机器学习]08-基于逻辑回归模型的鸢尾花数据集分类
  • AXI GPIO 2——ZYNQ学习笔记
  • 力扣top100(day03-02)--图论
  • Java 技术栈中间件优雅停机方案设计与实现全景图
  • 【JavaEE】多线程 -- 线程状态
  • 数据结构之顺序表相关算法题
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • linux中date命令
  • SAP-ABAP:SAP消息系统深度解析:架构设计与企业级应用实践
  • Wireshark中捕获的大量UDP数据
  • 23.Linux : ftp服务及配置详解
  • (论文速读)DiffusionDet - 扩散模型在目标检测中的开创性应用
  • AI搜索重构下的GEO优化服务商格局观察
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 轻松同步 Outlook 联系人到 Android
  • 深入解析SAE自动驾驶分级标准(0-5级)及典型落地实例