当前位置: 首页 > 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.lryc.cn/news/620460.html

相关文章:

  • 中介者模式和观察者模式的区别是什么
  • mysql——count(*)、count(1)和count(字段)谁更快?有什么区别?
  • 【React】hooks 中的闭包陷阱
  • 某处卖600的【独角仙】尾盘十分钟短线 尾盘短线思路 手机电脑通用无未来函数
  • coze小白-如何用coze上传本地文件?(对话流使用)
  • 《SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents》论文精读笔记
  • 云原生俱乐部-k8s知识点归纳(1)
  • 同创永益 IStorM CNBR云原生业务韧性管理平台 v3.3.0重磅发布:告别备份烦恼,云原生数据保护再升级!
  • 【博客系统测试报告】---接口自动化测试
  • toRefs、storeToRefs实际应用
  • 图书商城小程序怎么做?实体书店如何在微信小程序上卖书?
  • 机器学习 - Kaggle项目实践(3)Digit Recognizer 手写数字识别
  • 20道HTML相关前端面试题及答案
  • 如何通过WiFi将文件从安卓设备传输到电脑
  • 点图:数据分布的可视化利器
  • PostgreSQL——视图
  • 读书笔记:《我看见的世界》
  • 为什么Integer缓存-128 ~ 127
  • 【Linux学习|黑马笔记|Day4】IP地址、主机名、网络请求、下载、端口、进程管理、主机状态监控、环境变量、文件的上传和下载、压缩和解压
  • 编排之神-Kubernetes微服务专题--ingress-nginx及金丝雀Canary的演练
  • [Oracle数据库] ORACLE基本DML操作
  • 图论Day2学习心得
  • Pytest本地插件定制及发布指南
  • 代码随想录Day50:图论(图论理论、深度搜索理论、所有可达路径、广度搜索理论)
  • python sqlite3模块
  • 高效解决 pip install 报错 SSLError: EOF occurred in violation of protocol
  • 《贵州棒球百科》体育赛事排名·棒球1号位
  • 视频号主页的企业信息如何设置?
  • 消费级显卡分布式智能体协同:构建高性价比医疗AI互动智能体的理论与实践路径
  • 从理论到落地:分布式事务全解析(原理 + 方案 + 避坑指南)