☰
C++ STL函数
2026/9/29 3:03:02 网站建设 项目流程

vector

C++中的vector讲解_stl的vector能开几维-CSDN博客

C++ vector 容器浅析 | 菜鸟教程

函数作用
size()返回元素个数
empty()判断是否为空,空返回 true
[]下标访问元素,和数组一样
front()返回第一个元素
back()返回最后一个元素
push_back()尾部添加元素
emplace_back()尾部就地构造元素(效率更高)
pop_back()删除尾部元素
insert()在指定位置插入元素
erase()删除指定位置 / 区间元素
clear()清空所有元素
begin()返回首元素迭代器
end()返回尾后迭代器(不指向元素)
resize()改变容器大小(多删少补)
reserve()预分配空间,不改变元素个数
swap()交换两个 vector 的内容
assign()赋值,替换原有所有元素
data()返回指向底层数组的指针
shrink_to_fit()释放多余空间,让容量 = 大小.

vector<T> 变量名(元素个数, 初始值);

#include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {10,20,30}; // 1.front():取首元素 cout << v.front() << endl; //10 // 2.back():取末尾元素 cout << v.back() << endl; //30 // 3.push_back:尾部追加 v.push_back(40); // [10,20,30,40] // 4.emplace_back:原地构造,不用拷贝 v.emplace_back(50); // [10,20,30,40,50] // 5.pop_back:删掉末尾 v.pop_back(); // [10,20,30,40] // 6.insert(迭代器位置,值) v.insert(v.begin()+1, 15); //在下标1插入15 → [10,15,20,30,40] // 7.erase:删除单个/区间 v.erase(v.begin()+1); //删掉15 →[10,20,30,40] //v.erase(v.begin(),v.begin()+2); //删除前两个 // 8.clear:全部清空,size=0,capacity不变 //v.clear(); // 9.begin()/end() 迭代器遍历 for(auto it = v.begin(); it != v.end(); ++it) cout << *it << " "; //10.resize(n) 修改有效元素数量,多删少补0 v.resize(6); //不足补0:[10,20,30,40,0,0] v.resize(2); //多余截断:[10,20] //11.reserve(n) 预开容量,不改变size v.reserve(20); //capacity变20,元素不变 //12.swap 交换两个vector vector<int> v2={9,8}; v.swap(v2); //v:{9,8}, v2:{10,20} //13.assign 覆盖全部内容 v.assign(3,7); //全部替换成3个7 →{7,7,7} //14.data() 返回底层原生数组首指针 int* p = v.data(); cout << p[0]; return 0; }

list

函数核心作用
size()返回链表的元素个数
empty()判断链表是否为空,空则返回true
resize(n)修改链表大小为n,多余元素删除,不足补默认值
resize(n, val)修改链表大小为n,不足的位置填充val
front()获取链表第一个元素
back()获取链表最后一个元素
begin()返回指向首元素的迭代器
end()返回尾后迭代器(不指向任何元素)
rbegin()返回反向首迭代器(从尾部开始遍历)
rend()返回反向尾迭代器
push_back(val)尾部插入元素
emplace_back(val)尾部就地构造元素(效率更高)
push_front(val)头部插入元素(list 核心优势)
emplace_front(val)头部就地构造元素
insert(it, val)在迭代器it指向的位置前插入元素
pop_back()删除尾部元素
pop_front()删除头部元素(list 核心优势)
erase(it)删除迭代器it指向的元素
clear()清空链表所有元素
remove(val)删除链表中所有值等于 val的元素
unique()删除链表中连续重复的元素(去重)
splice(it, other)将另一个链表other拼接至当前迭代器位置
sort()对链表进行升序排序
sort(greater<T>())对链表进行降序排序
reverse()反转整个链表的元素顺序
merge(other)合并两个有序链表

set

功能代码写法说明刷题要点
插入元素st.insert(x);插入 x,存在则不变化不会重复,返回 pair,second 标记是否插入成功
删除指定值st.erase(x);删除所有值等于 x 的元素(set 唯一,最多删 1 个)元素不存在不会报错
删除迭代器位置st.erase(it);删除迭代器it指向元素O(logn),不要 erase (it++)
查找元素auto it = st.find(x);找到返回迭代器;找不到返回st.end()判断存在:if (st.find(x) != st.end())
计数st.count(x);返回 0 或 1(set 元素唯一)快速判断是否存在:if(st.count(x))
清空集合st.clear();清空所有元素
集合大小st.size();返回元素个数返回 size_t,和数字比较注意类型
是否为空st.empty();空返回 true
第一个元素*st.begin()最小元素(默认升序)空集合不能解引用!
最后一个元素*st.rbegin()或*prev(st.end())最大元素C++11 支持 prev
下界 >=xauto it = st.lower_bound(x);第一个≥x 的迭代器非常常用,找不到返回 end
上界 >xauto it = st.upper_bound(x);第一个 > x 的迭代器
遍历(for)for(auto v : st) { ... }C++11 范围 for,从小到大遍历只读,不能修改 v
迭代器遍历for(auto it = st.begin(); it != st.end(); ++it)顺序遍历用++it效率高于it++
降序 setset<int, greater<int>> st;从大到小排序begin 是最大值
set<int> st = {1,3,5,7}; for (auto it = st.begin(); it != st.end(); ++it) { cout << *it << " "; }
set<int> st = {1,3,5,7}; for (auto x : st) { cout << x << " "; } // 输出:1 3 5 7

pair

C++ pair的基本用法总结(整理)_c++ pair用法-CSDN博客

用法代码示例说明
定义 pair 对象pair<int,string> p;第一个模板参数 first 类型,第二个 second 类型
初始化pair<int,string> p{10,"hello"};C++11 列表初始化
make_pair 构造auto p = make_pair(20,"test");自动推导类型,不用手写模板参数
访问成员p.first; p.second;first 取第一个元素,second 取第二个元素
赋值p = make_pair(5,"abc");整体赋值,pair 支持拷贝赋值
pair 作为 map 的元素map<string,int> mp;for(auto &item:mp){auto k = item.first;auto v = item.second;``}`map/unordered_map 内部存储就是pair<const K,V>
pair 放入 vectorvector<pair<int,int>> vec;vec.emplace_back(1,2);vector 存键值对,代替小 map
比较运算符pair<int,int> a{1,3},b{2,0};if(a < b){}先比 first;first 相等再比 second
返回值(函数返回 pair)pair<bool,int> func(){return {true,100};}函数同时返回 2 个结果
C++17 结构化绑定auto [x,y] = p;直接拆解 pair 两个值,语法糖
emplace_back 插入 pairvec.emplace_back(3,4);直接构造,不需要手动 make_pair

map

C++ Map常见用法说明_c++ map用法-CSDN博客

功能示例代码说明
定义 mapmap<string, int> mp;key:string,value:int
插入元素mp.insert({"mac01", 5});insert,key 存在则不覆盖旧值
下标插入 / 修改mp["mac02"] = 10;key 存在则覆盖 value;key 不存在直接新增
判断 key 是否存在if(mp.count("mac01") != 0)count 返回 1 存在,0 不存在;O (logN)
查找获取迭代器auto it = mp.find("mac01");找到返回迭代器;找不到返回mp.end()
通过迭代器取 key、valueit->first; it->second;first=key,second=value
删除(按 key)mp.erase("mac01");删除 key 对应的整条记录
删除(按迭代器)mp.erase(it);删除迭代器指向元素,it 失效
获取大小mp.size()返回键值对数量
判空mp.empty()为空返回 true
清空全部元素mp.clear()清空所有 key‑value
遍历(范围 for)for(auto &item : mp){auto k = item.first;auto v = item.second;}按 key 从小到大遍历
迭代器遍历for(auto it=mp.begin();it!=mp.end();it++)begin 最小 key,end 尾后迭代器
C++17 结构化绑定遍历for(auto& [k,v] : mp){}直接拆解 key、value
获取值(find 安全版本)auto it = mp.find("mac01");if(it!=mp.end()){ int val = it->second; }推荐;不会插入新元素
下标取值注意int val = mp["mac01"];❗key 不存在,会自动插入一条默认 value 记录

map<string,int> mp; int x = mp["aaa"]; // 即使只想读,也会插入 ("aaa",0),改变容器!

map 只对key 排序,value 不参与排序;不能通过 value 找最小,必须手写循环。

map 里面的 pair 是pair<const K,V>,item.first(key)不能改,item.second(value)可以修改

stack

pop()函数只删除栈顶元素,不返回该元素的值。如果需要获取栈顶元素并删除,需先调用top()获取值,再调用pop()删除;

queue

https://blog.csdn.net/Maysheeo/article/details/149908000

deque

函数作用
push_back(x)尾部插入元素
push_front(x)头部插入元素
emplace_back(x)尾部就地构造(效率更高)
emplace_front(x)头部就地构造(效率更高)
pop_back()删除尾部元素
pop_front()删除头部元素
front()获取队头元素
back()获取队尾元素
size()返回元素个数
empty()判断是否为空
resize(n)修改大小为 n
clear()清空所有元素
operator[]下标随机访问(如dq[2])
at(i)安全访问,越界抛异常
begin()返回首迭代器
end()返回尾迭代器

priority_queue

【C++】STL——容器适配器priority_queue(优先级队列)详解 及 仿函数的介绍和使用-腾讯云开发者社区-腾讯云

C++ 容器类 <priority_queue> | 菜鸟教程

https://zhuanlan.zhihu.com/p/679669848

函数作用示例
.push(x)插入元素 x,自动堆化q.push(5);
.top()获取堆顶元素(最值),不删除int val = q.top();
.pop()删除堆顶元素,无返回值q.pop();
.empty()判断堆是否为空,空返回 trueif (!q.empty())
.size()返回堆内元素个数int sz = q.size();

unordered_set

  • 唯一性:元素值唯一,重复插入会被忽略。
  • 无序性:元素不按特定顺序存储,遍历顺序不确定。
  • 高效查找:哈希表实现,平均O(1)时间复杂度完成插入、删除、查找。
  • 迭代器类型:提供双向迭代器(但反向遍历无意义,因元素无序)。
操作函数功能作用
insert(val)插入元素 val
emplace(val)原地构造插入,效率更高
erase(val)删除值为 val 的元素
erase(iterator)删除迭代器指向的元素
clear()清空所有元素
find(val)查找 val,返回迭代器;找不到返回 end ()
count(val)判断 val 是否存在,存在返回 1,不存在返回 0
size()返回容器中元素个数
empty()判断容器是否为空
begin()返回指向第一个元素的迭代器
end()返回尾后迭代器(不指向元素)
cbegin()返回常量首迭代器
cend()返回常量尾后迭代器

unordered_map

  • 键值对存储,键唯一不可重复
  • 平均时间复杂度:查找 / 插入 / 删除O(1)
  • 无序,遍历顺序不固定
函数核心作用
empty()判断哈希表是否为空,空则返回true
size()返回哈希表中键值对的个数
operator[](key)通过键访问值;键不存在则自动插入,默认值初始化
at(key)安全访问键对应的值,键不存在会抛出异常
insert({key, value})插入一组键值对,键已存在则不覆盖
emplace(key, value)就地构造键值对,插入效率比insert更高
erase(key)删除指定键对应的键值对
erase(iterator)删除迭代器指向的键值对
clear()清空哈希表所有元素
find(key)查找指定键,返回对应迭代器;找不到返回end()
count(key)判断键是否存在,存在返回1,不存在返回0
begin()返回指向首元素的迭代器
end()返回尾后迭代器(不指向任何元素)
cbegin()返回常量首迭代器
cend()返回常量尾后迭代器
reserve(n)预分配n个元素空间,减少扩容次数

string

函数写法功能说明示例代码
string s;string s("abc");string s(n, 'ch');构造字符串:1. 空串2. 用字符串初始化3. n 个重复字符string a;string b("hello");string c(5, 'x'); // "xxxxx"
s.size()s.length()获取字符串有效字符长度,两者完全等价string s = "1234";int len = s.size(); // len=4
s.empty()判断字符串是否为空,空返回 trueif (s.empty()) cout << "空字符串";
s.clear()清空字符串,变为空串s.clear(); // s = ""
s += "xxx"s += 'a'字符串拼接,追加内容string s = "ab";s += "cd"; // s="abcd"s += 'e'; // s="abcde"
s.push_back('c')末尾追加单个字符(只能 char)s.push_back('z');
s.pop_back()删除最后一个字符,无返回值string s="abc"; s.pop_back(); // s="ab"
s.substr(pos, len)截取子串:pos = 起始下标,len = 截取长度省略 len 则截取到末尾string s = "abcdef";s.substr(1,3); // "bcd"s.substr(2); // "cdef"
s.erase(pos, len)删除:从 pos 开始删 len 个字符只传 pos:删到末尾string s="abcdef";s.erase(1,2); // 删除bc → adef
s.replace(pos, len, newStr)从 pos 起,删除 len 个字符,替换为新字符串string s="a123d";s.replace(1,3,"bc"); // "abcd"
s.find(str)正向查找子串 / 字符,返回首次出现下标找不到返回string::nposstring s="abcb";int pos = s.find("cb"); // pos=2if (s.find('x') == string::npos) 无匹配
s.rfind(str)反向查找,返回最后一次出现下标s.rfind('b'); // 3
s.compare(t)比较字符串:s==t 返回 0s<t 返回负数s>t 返回正数if (s.compare("abc") == 0) 相等
s[n]/s.at(n)访问下标 n 字符:[]不越界检查;at()越界抛异常char c = s[0];char d = s.at(1);
s.insert(pos, str)在 pos 下标处插入字符串string s="ad";s.insert(1,"bc"); // abcd
stoi(s)string 转 int(纯数字字符串)string num = "123"; int x = stoi(num);
to_string(val)数字 (int/double 等) 转 stringstring s = to_string(666); // "666"

<algorithm>

函数作用
find(begin,end,val)查找第一个等于 val 的元素,返回迭代器;找不到返回 end
find_if(begin,end,pred)查找第一个满足谓词 pred 的元素
find_if_not(begin,end,pred)查找第一个不满足 pred 的元素
count(begin,end,val)统计等于 val 的元素个数
count_if(begin,end,pred)统计满足谓词的元素个数
binary_search(begin,end,val)有序区间,判断 val 是否存在,返回 bool
lower_bound(begin,end,val)有序区间,第一个≥val 的迭代器
upper_bound(begin,end,val)有序区间,第一个 > val 的迭代器
equal_range(begin,end,val)返回 pair<lower,upper>,val 的范围
函数作用
sort(begin,end)快速排序,升序;可传自定义比较器sort(v.begin(),v.end(),greater<int>())
stable_sort(begin,end)稳定排序,相等元素相对顺序不变
partial_sort(beg,mid,end)部分排序:前 mid‑beg 个元素排好序
nth_element(beg,nth,end)把 nth 位置放到它最终排序后的位置,左右不一定有序,找第 k 大 / 小
is_sorted(begin,end)判断区间是否有序,返回 bool
partition(begin,end,pred)把满足 pred 放左边,不满足放右边;不稳定
stable_partition(begin,end,pred)分区,保持组内相对顺序

函数作用
copy(src_beg,src_end,dst_beg)拷贝到目标迭代器;目标要足够空间,常配合back_inserter
copy_if(src_beg,src_end,dst_beg,pred)拷贝满足条件的元素
fill(begin,end,val)全部填充 val
fill_n(begin,n,val)从 begin 开始 n 个元素赋值 val
generate(begin,end,gen_func)用生成函数给每个元素赋值
generate_n(begin,n,gen_func)生成 n 个
replace(begin,end,old_val,new_val)把等于 old_val 替换成 new_val
replace_if(begin,end,pred,new_val)满足条件就替换
swap(a,b)交换两个对象
iter_swap(it1,it2)交换两个迭代器指向元素

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询