news 2026/4/28 19:07:23

6.C嘎嘎STL vector

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.C嘎嘎STL vector

一,C嘎嘎STL

在实际项目开发中,无论是 C++ 还是 C 语言,都不建议自行手写数据结构实现 —— 现成的成熟库 / 标准容器往往更可靠。

而单片机开发中对数据结构的使用本就偏少,核心原因在于:但凡涉及稍复杂的动态数据结构,几乎都离不开malloc这类动态内存分配操作;但单片机场景下,动态内存申请的风险极高(易引发内存碎片、堆溢出、稳定性问题等),因此行业内的通用原则是 “能规避就规避”。

在实际项目开发中,优先选用 C++ 标准模板库(STL)的容器而非手写数据结构,既高效又能规避手写实现的漏洞。以最常用的动态数组容器vector为例,其封装了动态内存管理、自动扩容等核心能力,是项目中替代手写顺序表的最优选择。

二,STL vector

#include <iostream> // 引入vector头文件 #include <vector> // 引入算法库(用于查找) #include <algorithm> using namespace std; int main() { // 1. 初始化vector(动态数组),存储整型数据 vector<int> dataVec; // 无需预先指定容量,默认空容器 // 2. 向容器尾部添加元素(push_back,自动扩容) dataVec.push_back(10); dataVec.push_back(20); dataVec.push_back(30); dataVec.push_back(40); cout << "初始容器内容:"; for (int num : dataVec) { // 范围for遍历(C++11+) cout << num << " "; } cout << endl; // 输出:10 20 30 40 // 3. 在指定位置插入元素(insert) // 插入到索引1的位置(第二个元素前),值为15 dataVec.insert(dataVec.begin() + 1, 15); cout << "插入15后:"; for (int i = 0; i < dataVec.size(); ++i) { // 传统下标遍历 cout << dataVec[i] << " "; } cout << endl; // 输出:10 15 20 30 40 // 4. 删除指定位置元素(erase) // 删除索引1的元素(值为15) dataVec.erase(dataVec.begin() + 1); cout << "删除索引1元素后:"; for (auto it = dataVec.begin(); it != dataVec.end(); ++it) { // 迭代器遍历 cout << *it << " "; } cout << endl; // 输出:10 20 30 40 // 5. 查找元素(使用STL算法find) int target = 30; auto findIt = find(dataVec.begin(), dataVec.end(), target); if (findIt != dataVec.end()) { // 计算找到的元素索引 int index = findIt - dataVec.begin(); cout << "找到元素" << target << ",索引:" << index << endl; // 输出:索引2 } else { cout << "未找到元素" << target << endl; } // 6. 修改指定索引元素(直接通过下标赋值) dataVec[2] = 300; cout << "修改索引2元素后:"; for (int num : dataVec) { cout << num << " "; } cout << endl; // 输出:10 20 300 40 // 7. 容器常用属性与操作 cout << "当前元素个数:" << dataVec.size() << endl; // 输出:4 cout << "当前容器容量:" << dataVec.capacity() << endl; // 容量随扩容自动调整 cout << "容器是否为空:" << (dataVec.empty() ? "是" : "否") << endl; // 输出:否 // 8. 清空容器 dataVec.clear(); cout << "清空后容器是否为空:" << (dataVec.empty() ? "是" : "否") << endl; // 输出:是 return 0; }

三,QTQVector

QT 是基于 C++ 的开发框架,完全兼容标准 C++ 的 STL 库,因此std::vector可以在 QT 项目中直接使用,和普通 C++ 项目中使用vector的方式完全一致。

同时,QT 也提供了自己的动态数组容器QVector,它是 QT 容器体系的一部分,和std::vector功能类似,但针对 QT 的生态做了适配(比如信号槽、跨平台、隐式共享等)。

#include <QCoreApplication> #include <iostream> // 引入STL的vector头文件 #include <vector> int main(int argc, char* argv[]) { QCoreApplication a(argc, argv); // 1. 定义并使用std::vector std::vector<int> vec; vec.push_back(10); vec.push_back(20); vec.push_back(30); // 2. 遍历vector qDebug() << "std::vector:"; // QT的调试输出函数 for (int num : vec) { qDebug() << num; } // 3. 结合QT的其他功能使用 std::vector<QString> strVec; // 存储QT的QString类型 strVec.push_back("QT"); strVec.push_back("STL"); strVec.push_back("Vector"); for (const QString& str : strVec) { qDebug() << "string:" << str; } return a.exec(); }

运行结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 18:22:07

树莓派兼容的文字处理软件推荐

本文为大家推荐多款可在树莓派上流畅运行的优质文字处理软件及办公套件&#xff0c;详细介绍各款工具的核心优势、功能亮点与适用场景&#xff0c;助力大家为树莓派挑选适配的文档编辑与创作工具。 如今&#xff0c;将树莓派作为日常使用的电脑已不再小众&#xff0c;众多用户将…

作者头像 李华
网站建设 2026/4/22 20:40:48

基于Python的膳食健康系统_96e1ff52

文章目录一、项目技术二、项目内容和功能介绍三、核心代码四、效果图五 、资料获取一、项目技术 开发语言&#xff1a;Python python框架&#xff1a;Django 软件版本&#xff1a;python3.7/python3.8 数据库&#xff1a;mysql 5.7或更高版本 数据库工具&#xff1a;Navicat11…

作者头像 李华
网站建设 2026/4/25 22:44:07

还在愁论文?AI 写论文软件排行榜你真会选吗?

先给你最关键的结论 —— 按需求选对工具才是核心&#xff0c;不是盲目追 “榜一”。中文降重选PaperRed&#xff08;语义级改写&#xff0c;AI 率稳 < 5%&#xff09;&#xff0c;国内毕业全流程选毕业之家&#xff08;格式精修 合规降重&#xff09;&#xff0c;通用初稿…

作者头像 李华
网站建设 2026/4/23 10:47:58

TEASOFT驱动Keysight示波器自动截图:一键获取波形图并嵌入CSDN

前言 在编写电子电路、信号处理相关的技术博客时&#xff0c;经常需要将示波器屏幕截图插入到文章中。传统的手动截图方式效率低下&#xff1a;需要手动操作示波器保存截图、选择文件、上传图片、手动调整格式。今天介绍一个基于Python的自动化工具 keysightpf.py&#xff0c;可…

作者头像 李华
网站建设 2026/4/27 9:01:50

精密制造QMS解决方案:海岸线PQM破解质量追溯与交付难题

一、精密制造质量困境&#xff1a;数据孤岛难解&#xff0c;QMS数字化破局关键当前&#xff0c;精密制造企业数字化转型普遍陷入两难&#xff1a;系统投入持续增加&#xff0c;数据孤岛却愈发突出&#xff1b;流程文件不断细化&#xff0c;一线执行抵触情绪加剧&#xff1b;管理…

作者头像 李华
网站建设 2026/4/26 21:42:35

如何在没有备份的情况下从 iPad 恢复照片?

许多因素都可能导致 iPad 上的照片丢失&#xff0c;例如意外删除、病毒攻击、 iOS更新失败等等。随着近年来科技的发展&#xff0c;在没有备份的情况下丢失 iPad 上的照片已不再是噩梦。您可以借助以下两种行之有效的方法&#xff0c;快速恢复没有备份的 iPad 上的照片。第 1 部…

作者头像 李华