做题常用容器及方法

image
queue,stack,priority_queue,没有clear函数,如果要清除 q=queue(); 创建一个新的
image
image

image

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(不包含) 为有效

posted @   木瓜粉  阅读(28)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示