做题常用容器及方法
queue,stack,priority_queue,没有clear函数,如果要清除 q=queue
vector
构造:
vector<>(n) (n, val)
vector<>(begin, end)
vector<>(vec)
插入:ret = 第一个新插入元素的位置,it
.insert(it, val) (it, n, val)
.insert(it, begin, end)
重赋值:
.assign(n,val)
.assign(begin,end)
常用:
.clear()
.push_back(val) .pop_back()
.erase(it) (begin,end)
.front() .back()
queue、heap、stack
queue:
.front() .back() .push() .pop() .size()
priority_queue:
构造:注意,默认的比较函数是std::less, 是一个大根堆,正好和 sort相反(sort使用less 是从小到大排列)
priority_queue<int,vector<int>, greater<int>> heap;
常用:
.top()
.pop() .push() .empty()
stack:
.top() .push() .pop() .empty()
二分查找
// 下方代码必须按照 [l,mid] [mid+1,r] 划分区间,因为check(mid)
while(l < r){
mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid;
}
//此时l == r == mid
judge(l);是否符合条件
任意规则排序
struct obj {
key1,key2,key3;
bool operater< (const obj &x) {}
};
string、c_string
1.string:
构造:
string("x")
string(n, char)
string(begin,end)
string(str) (c_s)
string相比于vector特有的构造方式 string(str, pos, len) (c_s, len)
追加:
.append(str) (str, pos, len)
.appned(c_s) (c_s, len)
.append(n, char)
.append(begin,end)
插入:重构虽多,可以看成是两部分组成(string 构造函数一类, vector容器一类)
.insert(pos, str) (pos, str, pos2, len)
.insert(pos, c_s) (pos, c_s, len)
.insert(pos, n, char)
.insert(it, n, char) (it, char)
.insert(begin, end)
查找:返回的是数组下标,而不是迭代器,要特别注意, ret : 失败返回 -1(npos)
.find(str, pos) .find(c_str, pos)
.find(c, pos)
.find(c_str, pos, len) 这个重载非常特别,使用c_str, 但是配套的却是 pos len, 前面一直都是只用len 和其搭配
截取子串:
substr(pos, len), 当len = -1时,为全长
常用的:
.length() .clear()
.pop_back()
.erase(it) .erase(begin, end) .erase(pos, len) 需要注意,最后这个形式,使用pos时必须要指定长度
转换:
string -> c_string : .c_str(), 返回一个char *, 注意,返回的是const char*
c_string -> string : string("xxxx")
字符串转换成数字: stoi(string, it, base) 注意,非string成员函数,it是出参指向第一个非数字位置,base表示进制, i可以换成l ll f d
数字转字符串:to_string(val), 同样也是非成员函数,
2.c_string
map、set
map:
构造pair, make_pair<int, char>(x,y); {x,y}
从大到小 map<type1,type2,greater<type1>> mp;
.insert([pair])
.erase(key) (begin,end) (it)
.find(key) map时使用
.equal_range(key) 返回值是pair, 常用法,auto it = mp.equal_range(key); multimap时使用
.count(key)
set:
.insert .erase .find
.count(val) .size()
algorithm
sort(begin,end,func)
stable_sort()
unique(begin,end) 必须在排序之后, ret指向第一个多余元素,
reverse(begin,end)
partition(begin,end, func) 函数是 bool func(val) 的形式, 返回值为第一个不符合要求的迭代器,begin到ret(不包含) 为有效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)