news 2026/9/16 7:21:01

5.STL容器与QT中的容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5.STL容器与QT中的容器

先搞懂核心概念:STL容器是什么?

STL(Standard Template Library,标准模板库)是C++内置的“工具库”,而STL容器就是这个库里帮你“装数据”的通用容器/集合——可以把它理解成不同类型的“盒子”,每个盒子有固定的“摆放数据”的规则,帮你快速管理一组数据(比如列表、键值对、队列等),不用自己从零写数组、链表这些数据结构。

简单说:你想存一组整数、一组字符串,不用手动写数组+扩容+查找逻辑,直接用STL容器,它已经帮你封装好了所有常用操作(添加、删除、查找、排序等)。

新手必学的核心STL容器(按使用频率排序)

我用“通俗比喻+用途+简单代码”的方式讲解,新手先掌握这5个就够了:

容器名称

通俗比喻

核心用途

关键特点

std::vector

可自动扩容的数组

存储有序、可随机访问的列表

尾部增删快,中间增删慢

std::string

字符容器(字符串)

存储文本

专门处理字符串,比char数组好用

std::map

字典/通讯录(键值对)

通过“键”快速找“值”(比如ID查姓名)

按键自动排序,查找效率高

std::unordered_map

无序字典

更快的键值对查找

不排序,查找速度比map更快

std::list

双向链表

频繁在任意位置增删数据

增删快,随机访问慢

新手友好的代码示例

1. std::vector(最常用)
#include <iostream> // 必须包含对应容器的头文件 #include <vector> int main() { // 创建一个存储整数的vector(空盒子) std::vector<int> nums; // 往盒子里加数据(尾部添加) nums.push_back(10); nums.push_back(20); nums.push_back(30); // 访问数据(像数组一样随机访问) std::cout << "第一个元素:" << nums[0] << std::endl; // 输出10 std::cout << "第二个元素:" << nums.at(1) << std::endl; // 输出20(at更安全,会检查越界) // 遍历所有数据 for (int num : nums) { std::cout << num << " "; // 输出:10 20 30 } // 获取元素个数 std::cout << "\n元素总数:" << nums.size() << std::endl; // 输出3 return 0; }
2. std::string(字符串容器)
#include <iostream> #include <string> int main() { std::string str = "Hello"; // 拼接字符串 str += " STL"; std::cout << str << std::endl; // 输出:Hello STL // 获取长度 std::cout << "长度:" << str.length() << std::endl; // 输出8 // 查找子串 if (str.find("STL") != std::string::npos) { std::cout << "找到子串STL" << std::endl; } return 0; }
3. std::map(键值对容器)
#include <iostream> #include <map> #include <string> int main() { // 创建:键是int(学号),值是string(姓名) std::map<int, std::string> studentMap; // 添加键值对 studentMap[101] = "张三"; studentMap[102] = "李四"; studentMap[103] = "王五"; // 通过键找值 std::cout << "102号学生:" << studentMap[102] << std::endl; // 输出李四 // 遍历所有键值对 for (auto& pair : studentMap) { std::cout << "学号:" << pair.first << ",姓名:" << pair.second << std::endl; } return 0; }

STL容器和Qt容器的关联(提前铺垫)

Qt为了适配自身框架,也提供了一套容器(和STL容器一一对应),新手不用怕,语法几乎一致:

STL容器

Qt容器

核心区别

std::vector

QVector

Qt容器支持信号槽、跨线程

std::string

QString

QString更适配Qt的中文、UI

std::map

QMap

QMap是Qt原生,兼容Qt API

std::unordered_map

QHash

QHash查找更快

比如Qt中用QVector的写法:

#include <QVector> #include <QDebug> int main() { QVector<int> nums; nums << 10 << 20 << 30; // Qt特有的添加方式(也可以用push_back) qDebug() << nums[0]; // 输出10 return 0; }

总结

  1. STL容器是C++内置的“数据盒子”,帮你快速管理一组数据,不用自己写底层逻辑;
  2. 新手优先掌握std::vector(列表)、std::string(字符串)、std::map(键值对)这3个,覆盖80%的使用场景;
  3. Qt容器和STL容器用法几乎一致,学会STL容器,上手Qt容器会非常快;
  4. 核心记住:用容器前要包含对应头文件,容器的操作(添加、遍历、查找)是通用逻辑。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 7:56:22

黑客能让 AI 发辞职信?OpenAI 承认 Atlas 浏览器提示词注入攻击难以根治

OpenAI 在当地时间周一发布的一篇博客文章中详细阐述了该公司为增强 Atlas 的防御能力、抵御持续攻击所采取的措施&#xff0c;并写道&#xff1a;“提示词注入攻击就像网络上的诈骗和社会工程学攻击一样&#xff0c;几乎不可能被完全‘攻克’。”该公司坦承&#xff0c;ChatGP…

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

14、高速始终在线的电缆和DSL连接:家庭网络接入指南

高速始终在线的电缆和DSL连接:家庭网络接入指南 在现代生活中,互联网连接已成为必不可少的一部分。对于家庭用户来说,高速始终在线的电缆或DSL互联网连接是最佳选择。这种连接方式通常提供300 - 500Kbps的速度,性能远优于传统的拨号上网。而且,由于电缆和DSL提供始终在线…

作者头像 李华
网站建设 2026/9/15 7:56:24

Open-AutoGLM实战指南(新手必看的8大核心技巧)

第一章&#xff1a;Open-AutoGLM使用教程Open-AutoGLM 是一个开源的自动化自然语言处理框架&#xff0c;专为快速构建和部署基于 GLM 架构的语言模型应用而设计。它支持任务自动识别、输入解析、上下文管理与多轮对话能力&#xff0c;适用于智能客服、自动化报告生成等场景。环…

作者头像 李华
网站建设 2026/9/15 7:56:23

21、探索科技电视与网络技术的精彩世界

探索科技电视与网络技术的精彩世界 在当今数字化时代,科技的发展日新月异,深刻地影响着我们生活的方方面面。科技电视(TechTV)作为专注展示科技影响力的平台,以及丰富多样的网络技术知识,为我们打开了了解科技世界的大门。 科技电视(TechTV)的魅力 TechTV 是唯一一家…

作者头像 李华
网站建设 2026/9/8 19:32:40

二阶提示词注入在多Agentic场景下的攻击探索

1.引言 随着Agentic的不断发展&#xff0c;目前有一种发展趋势是多Agentic协作与上下文共享。这种共享方式让任务自动化能力大增&#xff0c;但也引入了新的攻击面。攻击者可以利用提示词注入攻击一个Agentic&#xff0c;从而操纵此Agentic去攻击其他Agentic。这类提示词注入攻…

作者头像 李华
网站建设 2026/9/15 14:13:59

如何构建一个真正理解图像、表格和文本的多模态 RAG 系统?

构建多模态 RAG 系统的终极指南照片由 Sol Ponce 提供&#xff0c;发布在 Unsplash 三个月前&#xff0c;我看着我们新做的 AI 应用在很多简单问题上“翻车”。不是因为 AI 不够聪明&#xff0c;也不是因为数据不够&#xff0c;而是答案在一张图里&#xff0c;而这个 AI 只能读…

作者头像 李华