5.STL容器与QT中的容器
·
先搞懂核心概念:STL容器是什么?
STL(Standard Template Library,标准模板库)是C++内置的“工具库”,而STL容器就是这个库里帮你“装数据”的通用容器/集合——可以把它理解成不同类型的“盒子”,每个盒子有固定的“摆放数据”的规则,帮你快速管理一组数据(比如列表、键值对、队列等),不用自己从零写数组、链表这些数据结构。
简单说:你想存一组整数、一组字符串,不用手动写数组+扩容+查找逻辑,直接用STL容器,它已经帮你封装好了所有常用操作(添加、删除、查找、排序等)。
新手必学的核心STL容器(按使用频率排序)
我用“通俗比喻+用途+简单代码”的方式讲解,新手先掌握这5个就够了:
|
容器名称 |
通俗比喻 |
核心用途 |
关键特点 |
|
|
可自动扩容的数组 |
存储有序、可随机访问的列表 |
尾部增删快,中间增删慢 |
|
|
字符容器(字符串) |
存储文本 |
专门处理字符串,比char数组好用 |
|
|
字典/通讯录(键值对) |
通过“键”快速找“值”(比如ID查姓名) |
按键自动排序,查找效率高 |
|
|
无序字典 |
更快的键值对查找 |
不排序,查找速度比map更快 |
|
|
双向链表 |
频繁在任意位置增删数据 |
增删快,随机访问慢 |
新手友好的代码示例
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容器 |
核心区别 |
|
|
|
Qt容器支持信号槽、跨线程 |
|
|
|
QString更适配Qt的中文、UI |
|
|
|
QMap是Qt原生,兼容Qt API |
|
|
|
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;
}
总结
- STL容器是C++内置的“数据盒子”,帮你快速管理一组数据,不用自己写底层逻辑;
- 新手优先掌握
std::vector(列表)、std::string(字符串)、std::map(键值对)这3个,覆盖80%的使用场景; - Qt容器和STL容器用法几乎一致,学会STL容器,上手Qt容器会非常快;
- 核心记住:用容器前要包含对应头文件,容器的操作(添加、遍历、查找)是通用逻辑。
更多推荐
所有评论(0)