2026/2/10 14:41:18
网站建设
项目流程
泉州哪里建设网站,wordpress爱客0.9,网站数据库连接不上的常见问题,手机网站 cmsSTL#xff08;Standard Template Library#xff09;是 C 标准库的核心部分#xff0c;本质是一套通用的、可复用的模板类和函数#xff0c;目的是让开发者不用重复造轮子#xff0c;直接使用成熟的数据结构和算法。STL 主要由以下六大组件构成#xff0c;其中容器、算法…STLStandard Template Library是 C 标准库的核心部分本质是一套通用的、可复用的模板类和函数目的是让开发者不用重复造轮子直接使用成熟的数据结构和算法。STL 主要由以下六大组件构成其中容器、算法、迭代器是最核心的三大件组件作用容器Container存储数据的类模板如数组、链表、栈、队列、集合等算法Algorithm操作容器中数据的函数模板如排序、查找、遍历、交换、删除等迭代器Iterator连接容器和算法的 桥梁本质是类模板提供类似指针的方式访问容器元素仿函数Functor重载()运算符的类可作为算法的参数类似函数指针但更灵活适配器Adapter包装已有组件改变其接口或行为如栈 stack 是对 deque 的适配器分配器Allocator负责容器的内存分配与释放通常无需手动操作STL 默认实现足够好用一、核心组件详解附实用代码示例1. 容器最常用部分容器分为三类序列式容器元素有序可按索引访问、关联式容器元素按关键字排序查找效率高、无序关联式容器C11 新增哈希表实现。1序列式容器示例cpp运行#include iostream // 包含对应容器的头文件 #include vector // 动态数组最常用 #include list // 双向链表 #include deque // 双端队列 #include stack // 栈适配器 #include queue // 队列适配器 using namespace std; int main() { // 1. vector动态数组随机访问快尾部增删快 vectorint vec {1, 2, 3, 4, 5}; vec.push_back(6); // 尾部添加元素 cout vector第3个元素 vec[2] endl; // 随机访问索引从0开始 // 遍历vector迭代器方式 cout vector遍历; for (vectorint::iterator it vec.begin(); it ! vec.end(); it) { cout *it ; } cout endl; // 2. stack栈后进先出LIFO stackint st; st.push(10); st.push(20); cout 栈顶元素 st.top() endl; // 获取栈顶 st.pop(); // 弹出栈顶无返回值 cout 弹出后栈顶 st.top() endl; // 3. queue队列先进先出FIFO queueint q; q.push(100); q.push(200); cout 队首元素 q.front() endl; // 获取队首 q.pop(); // 弹出队首 cout 弹出后队首 q.front() endl; return 0; }2关联式 / 无序容器示例cpp运行#include iostream #include map // 有序键值对红黑树 #include unordered_map // 无序键值对哈希表C11 #include set // 有序不重复集合 using namespace std; int main() { // 1. map键唯一自动按键升序排列 mapstring, int score; score[张三] 90; score[李四] 85; score.insert({王五, 95}); // 另一种插入方式 // 遍历map cout map遍历 endl; for (auto it score.begin(); it ! score.end(); it) { cout it-first : it-second endl; } // 2. unordered_map哈希表查找效率更高无序 unordered_mapstring, int umap {{苹果, 5}, {香蕉, 3}}; cout 香蕉价格 umap[香蕉] endl; // 3. set元素唯一自动升序 setint s {3, 1, 4, 1, 2}; // 重复元素会被自动去重 cout set遍历; for (int num : s) { // 范围for遍历C11 cout num ; } cout endl; return 0; }2. 算法AlgorithmSTL 算法是全局函数定义在algorithm头文件中可直接操作容器元素无需关心容器底层实现。cpp运行#include iostream #include vector #include algorithm // 算法头文件 using namespace std; // 自定义比较函数降序排序 bool cmp(int a, int b) { return a b; } int main() { vectorint vec {5, 2, 9, 1, 5, 6}; // 1. 排序sort sort(vec.begin(), vec.end()); // 默认升序 cout 升序排序后; for (int num : vec) cout num ; cout endl; sort(vec.begin(), vec.end(), cmp); // 自定义降序 cout 降序排序后; for (int num : vec) cout num ; cout endl; // 2. 查找find auto it find(vec.begin(), vec.end(), 5); if (it ! vec.end()) { cout 找到5索引 it - vec.begin() endl; } // 3. 计数count int cnt count(vec.begin(), vec.end(), 5); cout 5出现的次数 cnt endl; // 4. 反转reverse reverse(vec.begin(), vec.end()); cout 反转后; for (int num : vec) cout num ; cout endl; return 0; }3. 迭代器Iterator迭代器是容器和算法的 桥梁不同容器的迭代器用法基本一致核心类型begin()指向第一个元素的迭代器end()指向最后一个元素下一个位置的迭代器尾后迭代器不可解引用cbegin()/cend()常量迭代器C11不可修改元素总结STL 核心是容器存数据、算法操作数据、迭代器连接两者基于模板实现支持通用编程。常用容器中vector动态数组是最基础且高频使用的map/unordered_map适合键值对场景stack/queue适合特定的存取规则。STL 算法如sort、find无需重复编写直接调用即可注意需包含algorithm头文件且算法操作的是迭代器范围。