C++的STL标准库
STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的统称,主要出现在C++中;STL提供了六大组件,彼此之间可以组合套用,
这六大组件分别是容器、算法、迭代器、仿函数、适配器和空间配置器。
一、STL标准库的容器
1. vector动态数组
vector为可变长数组(动态数组),定义的vector数组可以随时添加数值和删除元素
头文件
#include<vector>
vector的声明和初始化
#include<vector> // 初始化一维可变长数组 vector<int> nums; // 声明一个动态数组nums vector<int> nums(10); // 声明一个初始长度为10的动态数组nums vector<int> nums(10,2); // 声明一个初始长度为10,内容都为2的动态数组nums vector<int> nums = {1,2,3,4,5,6}; // 也可用{}初始化数组
vector<int> a(nums); // 用nums中的内容初始化a vector<int> a(nums.begin(),nums.begin() + 2) // 用nums前两个初始化a
int a[] = [1,2,3,4,5,6]; // 还可以使用数组a来初始化nums vector<int> nums(a,a+2); vector<int> nums(&a[0],&a[2]); // 初始化二维可变长数组 vector<vector<int>> nums; vector<vector<int>> num(10,vector<int>(5,0)); // 定义了一个10行5列全为0的数组
vecotr的访问
// 单个访问 cout << nums[1]; // 遍历 for (int i = 0; i < nums.size(); i++){ cout << nums[i]; } // 自动类型 for (auto i : nums) cout << i;
vector的方法函数

注意事项:
1. 对vector进行排序时,应是sort(nums.begin(),nums.end())
2. nums[i] 与 *(nums.begin() + i) 等价
2、stack栈
栈为数据结构的一种,是STL中遵循先入后出的容器
头文件
#include<stack>
stack的定义
// stack的定义 stack<int> s1;
stack<int> s2(s1); // 用s2初始化s1
stack<string> s1; stack<node> s1;
stack的方法函数
可以考虑使用vector模拟栈
3、queue队列
队列是一种先入先出的数据结构
头文件
#include<queue>
queue的定义
queue<int> a;
queue的方法函数
4、deque双端队列
首尾都可以插入和删除的队列称为双端队列
头文件
#include<deque>
deque的定义
queue<int> q1;
deque的方法函数
deque可以进行排序,但只能从小到大排序
5、map映射
映射和python中的字典类似,一个键对应一个键值
头文件
#include<map>
map的定义
map<string, string> dic; map<string, int> dic;
map会按照键的大小从小到大自动排序
map的方法函数
map和set的end()函数都是指向末尾的下一个
map的begin()和end()遍历
#include<iostream> #include<map> map<int,int> dic; map[0] = 1; map[1] = 2; map[2] = 3; auto bg = map.begin(); //此处返回的是第一个元素的迭代器 bg是结构体指针 while (bg != map.end()){ cout << bg->first << " " << bg->second << endl; // ->first ->second 是map迭代器的用法,分别返回的是键和键值 bg ++; }
还可以使用rbegin 和 rend逆序遍历map
#include<iostream> #include<map> map<int,int> dic; map[0] = 1; map[1] = 2; map[2] = 3; auto bg = map.rbegin(); while (bg != map.rend()){ cout << bg->first << " " << bg->second << endl; bg ++; }
map添加元素
#include<map> map<int,int> dic; // 直接添加 dic[1] = 1; // 插入键值对 dic.insert({1,1}); dic.insert(make_pair(1,1)); dic.insert(pair<int,int>(1,1));
map访问元素
// 下标直接访问 cout << dic[1] ; // 遍历访问 // 结构体指针 auto it = dic.begin(); for(it;it != dic.end(); it++){ cout << it -> first << " " << it->second << endl; } // 智能指针 for (auto it : dic){ cout << it.first << " " << it.second << endl; }
// 对单个元素进行访问 还是结构体指针
auto it = dic.find(3);
cout << it->first;
// c++17之后的特性
for (auto [x,y] : dic){
cout << x << " " << y << endl;
}
6. set集合
set和python中的集合类似,集合中的元素不重复且有序,自动按照从小到大排序
头文件
#include<set>
集合的定义
set<int> hash;
集合的方法函数
map和set的end()函数都是指向末尾的下一个
其他的set:multiset(元素可以多次且有序)、unordered_set(元素仅一次但无序)、unorder_multiset(元素多次且有序)
7. pair
pair只含有两个元素,+可以看作只有两个元素的结构体,其作用为作为二元结构体或作为键值对插入。
#include<utility> pair<string,int> p; pair<string,int> p("yaya",250); p = {"ya",250};
8. string字符串
可以把string理解为一个字符串类型,可以像int之类的直接定义。
#include<string> string str1; string str2("abc"); string str3("abcde",0,3); // 从0位置开始(0不写默认为0),长度为3 abc string str4(5,'a'); // 5个a string str5(str2,0,2); // 你猜是啥 2是长度!
string可以访问单个字符 str[i],也可以用cout直接全部输出
string字符串可以直接用 < > = <= >= != 等比较
string字符串可以使用 + 进行拼接
键盘读入字符串相关:
#include<string> string s1,s2; cin >> s1; // 读入字符串,遇到空格(只保留空格前)或回车结束 getchar(); getline(cin,s2); // 读入字符串,能保留空格,遇回车结束
上述代码中有一个getchar,是因为getline会获取前一个输入的换行符,影响字符串的读取,所以需要getchar把换行符读走,或者在使用cin后加一行cin.ignore()
string的方法函数
可用sort按照ascii排序
9. list 链表
就是链表
#include<list> list<int> l1; list<int> l1{1,2,3,4,5,6}; list<int> l1(5,3);
方法函数:begin()、end()、push_back、push_front、empty()
resize() :resize(n)设定链表仅能容纳n个元素,超出的将被删除,如果n比原来list的长度长,则默认超出的为0,也可resize(n,m)
front()、back()、swap()交换两个链表、pop_back()、pop_front()、reverse()
merge(a,b):执行后b为空
insert()、erase()删除全部指定的元素、remove()移除单个元素
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具