[exaqp]STL
string
string s
定义
s.length() / s.size()
字符串长度
s.insert(pos,s2)
位置插入
s.erase(a,b)
从 的下标 开始删除 个元素
s.push_back(x)
尾部插入元素
s.find(s2,pos)
在 的下标 起查找 第一次出现的位置
s.substr(pos,n)
返回从 的下标 起的 个字符
s.replace(pos,n,s2)
的下标 起的 个字符换成 的内容
vector
vector<int> v
定义
v[100]
随机访问
v.push_back()
向尾部压入元素
v.pop_back()
删除尾部元素
v.size()
内部元素个数
v.empty()
判断是否为空
v.insert()
任意位置插入元素
v.erase()
任意位置删除元素
v.front()
访问第一个元素
v.back()
访问最后一个元素
v.begin()
迭代器,指向初始元素
v.end()
迭代器,指向尾部元素之后
v.clear()
清空内部元素,但不会释放空间
队列
queue<int> q
定义
q.push()
压入队尾
q.front()
查询队首
q.pop()
弹出队首
q.size()
队列内部元素个数
q.empty()
判断是否为空
栈
stack<int> s
定义
s.empty()
如果栈空则返回真
s.push()
压入栈顶
s.top()
查询栈顶
s.pop()
弹出栈顶
s.size()
栈内部元素个数
set
set<int> st
定义
st.insert(x)
将 插入如 set 容器 中
st.begin()
返回 set 容器第一个元素的迭代器
st.end()
返回一个指向当前 set 末尾元素的下一位置的迭代器.
st.find(x)
返回给定值值得定位器,如果没找到则返回end()
。
st.clear()
删除 set 容器中的所有的元素
st.empty()
判断 set 容器是否为空
st.size()
返回当前 set 容器中的元素个数
st.rbegin()
返回的值和end()
相同(反向迭代器)
st.rend()
返回的值和begin()
相同
st.max_size()
返回 set 容器可能包含的元素最大个数
st.erase(x)
删除 set 中对应值为 的迭代器
st.erase(x,y)
删除 set 中对应值为 的迭代器
inset(first,second)
将定位器 到 之间的元素插入到 set 中
关于 set 的几个问题
-
为何 map 和 set 的插入删除效率比用其他序列容器高?
因为对于关联容器来说,不需要做内存拷贝和内存移动。
set 容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。
-
为何每次 insert 之后,以前保存的 iterator 不会失效?
iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针不会失效呢(当然被删除的那个元素本身已经失效了)。
-
当数据元素增多时,set 的插入和搜索速度变化如何?
如果你知道 log2 的关系你应该就彻底了解这个答案。在 set 中查找是使用二分查找,也就是说,如果有 16 个元素,最多需要比较 4 次就能找到结果,有 32 个元素,最多比较 5 次。那么有 10000 个呢?最多比较的次数为 log10000,最多为 14 次,如果是 20000 个元素呢?最多不过 15 次。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】