vector
代码 | 算法复杂度 | 返回值类型 | 含义 |
---|---|---|---|
c.front() | O ( 1 ) | 引用 | 返回容器中的第一个数据 |
c.back() | O ( 1 ) | 引用 | 返回容器中的最后一个数据 |
c.at(idx) | 引用 | 返回 c[idx] ,会进行边界检查,如果越界会报错,比直接使用 [] 更好一些,常在项目中使用 | |
c.size() | O ( 1 ) | 返回实际数据个数(unsigned类型) | |
c.begin() | O ( 1 ) | 迭代器 | 返回首元素的迭代器(通俗来说就是地址) |
c.end() | O ( 1 ) | 迭代器 | 返回最后一个元素后一个位置的迭代器(地址) |
c.empty() | O ( 1 ) | bool | 判断是否为空,为空返回真,反之返回假 |
c.reserve(sz) | 为数组提前分配sz的内存大小,即改变了 capacity 的大小,主要是为了防止在 push_back 过程中多次的内存拷贝 | ||
c.assign(beg, end) | 将另外一个容器[x.begin(), x.end()) 里的内容拷贝到c中 | ||
c.assign(n, val) | 将n 个val值拷贝到c数组中,这会清除掉容器中以前的内容,c数组的size将变为n,capacity 不会改变 | ||
c.pop_back() | O ( 1 ) | 删除最后一个数据 | |
c.push_back(element) | O ( 1 ) | 在尾部加一个数据 | |
c.emplace_back(ele) | O ( 1 ) | 在数组中加入一个数据,和 push_back 功能基本一样,在某些情况下比它效率更高,支持传入多个构造参数 | |
c.clear() | O ( N ) | 清除容器中的所有元素 | |
c.resize(n, v) | 改变数组大小为n,n个空间数值赋为v,如果没有默认赋值为0 | ||
c.insert(pos, x) | O ( N ) | 向任意迭代器pos插入一个元素x | |
例:c.insert(c.begin() + 2, -1) | 将-1插入c[2]的位置 | ||
c.erase(first, last) | O ( N ) | 删除[first, last)的所有元素 |
Stack
代码 | 含义 |
---|---|
s.push(ele) | 元素ele入栈,增加元素 O ( 1 ) |
s.pop() | 移除栈顶元素 O ( 1 ) |
s.top() | 取得栈顶元素(但不删除)O ( 1 ) |
s.empty() | 检测栈内是否为空,空为真 O ( 1 ) |
s.size() | 返回栈内元素的个数 O ( 1 ) |
qeque
代码 | 含义 |
---|---|
q.front() | 返回队首元素 O ( 1 ) O(1)O(1) |
q.back() | 返回队尾元素 O ( 1 ) O(1)O(1) |
q.push(element) | 尾部添加一个元素element 进队O ( 1 ) O(1)O(1) |
q.pop() | 删除第一个元素 出队 O ( 1 ) O(1)O(1) |
q.size() | 返回队列中元素个数,返回值类型unsigned int O ( 1 ) O(1)O(1) |
q.empty() | 判断是否为空,队列为空,返回true O ( 1 ) O(1)O(1) |
deque
代码 | 含义 |
---|---|
push_back(x)/push_front(x) | 把x插入队尾后 / 队首 O ( 1 ) O(1)O(1) |
back()/front() | 返回队尾 / 队首元素 O ( 1 ) O(1)O(1) |
pop_back() / pop_front() | 删除队尾 / 队首元素 O ( 1 ) O(1)O(1) |
erase(iterator it) | 删除双端队列中的某一个元素 |
erase(iterator first,iterator last) | 删除双端队列中[first,last)中的元素 |
empty() | 判断deque是否空 O ( 1 ) O(1)O(1) |
size() | 返回deque的元素数量 O ( 1 ) O(1)O(1) |
clear() | 清空deque |
priority_queue
代码 | 含义 |
---|---|
q.top() | 访问队首元素 O ( 1 ) O(1)O(1) |
q.push() | 入队 O ( l o g N ) O(logN)O(logN) |
q.pop() | 堆顶(队首)元素出队 O ( l o g N ) O(logN)O(logN) |
q.size() | 队列元素个数 O ( 1 ) O(1)O(1) |
q.empty() | 是否为空 O ( 1 ) O(1)O(1) |
注意没有clear()! | 不提供该方法 |
优先队列只能通过top()访问队首元素(优先级最高的元素) |
priority_queue<int> pq; *//* *默认大根堆, 即每次取出的元素是队列中的最大值*
priority_queue<int, vector<int>, greater<i //定义的比较结构体
//注意:cmp是个结构体
struct cmp {//自定义堆的排序规则
bool operator()(const Point& a,const Point& b) {
return a.x < b.x;
map
代码 | 含义 | 复杂度 |
---|---|---|
mp.find(key) | 返回键为key的映射的迭代器 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回m p . e n d ( ) | O ( l o g N ) |
mp.erase(it) | 删除迭代器对应的键和值 | O ( l o g N ) |
mp.erase(key) | 根据映射的键删除键和值 | O ( l o g N ) |
mp.erase(first,last) | 删除左闭右开区间迭代器对应的键和值 | O ( l a s t − f i r s t ) |
mp.size() | 返回映射的对数 | O ( 1 ) |
mp.clear() | 清空map中的所有元素 | O ( N ) |
mp.insert() | 插入元素,插入时要构造键值对 | O ( l o g N ) |
mp.empty() | 如果map为空,返回true,否则返回false | O ( 1 ) |
mp.begin() | 返回指向map第一个元素的迭代器(地址) | O ( 1 ) |
mp.end() | 返回指向map尾部的迭代器(最后一个元素的下一个地址) | O ( 1 ) |
mp.rbegin() | 返回指向map最后一个元素的迭代器(地址) | O ( 1 ) |
mp.rend() | 返回指向map第一个元素前面(上一个)的逆向迭代器(地址) | O ( 1 ) |
mp.count(key) | 查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0 | O(log n) |
mp.lower_bound() | 返回一个迭代器,指向键值>= key的第一个元素 | |
mp.upper_bound() | 返回一个迭代器,指向键值> key的第一个元素 |
set
代码 | 复杂度 | 含义 |
---|---|---|
s.begin() | O ( 1 ) O(1)O(1) | 返回set容器的第一个元素的地址(迭代器) |
s.end() | O ( 1 ) O(1)O(1) | 返回set容器的最后一个元素的下一个地址(迭代器) |
s.rbegin() | O ( 1 ) O(1)O(1) | 返回逆序迭代器,指向容器元素最后一个位置 |
s.rend() | O ( 1 ) O(1)O(1) | 返回逆序迭代器,指向容器第一个元素前面的位置 |
s.clear() | O ( N ) O(N)O(N) | 删除set容器中的所有的元素,无返回值 |
s.empty() | O ( 1 ) O(1)O(1) | 判断set容器是否为空 |
s.insert(element) | O ( l o g N ) O(logN)O(logN) | 插入一个元素 |
s.size() | O ( 1 ) O(1)O(1) | 返回当前set容器中的元素个数 |
erase(iterator) | O ( l o g N ) O(logN)O(logN) | 删除定位器iterator指向的值 |
erase(first, second) | 删除定位器first和second之间的值 | |
erase(key_value) | O ( l o g N ) O(logN)O(logN) | 删除键值key_value的值 |
查找 | ||
s.find(element) | 查找set中的某一元素,有则返回该元素对应的迭代器,无则返回结束迭代器 | |
s.count(element) | 查找set中的元素出现的个数,由于set中元素唯一,此函数相当于查询element是否出现 | |
s.lower_bound(k) | O ( l o g N ) O(logN)O(logN) | 返回大于等于k的第一个元素的迭代器 |
s.upper_bound(k) | O ( l o g N ) O(logN)O(logN) | 返回大于k的第一个元素的迭代器 |
string
代码 | 含义 |
---|---|
s.push_back() | 在末尾插入 |
例:s.push_back('a') | 末尾插入一个字符a |
s.insert(pos,element) | 在pos位置插入element |
例:s.insert(s.begin(),'1') | 在第一个位置插入1字符 |
s.append(str) | 在s字符串结尾添加str字符串 |
例:s.append("abc") | 在s字符串末尾添加字符串“abc” |
erase(iterator p) | 删除字符串中p所指的字符 |
erase(iterator first, iterator last) | 删除字符串中迭代器区间[first,last)上所有字符 |
erase(pos, len) | 删除字符串中从索引位置pos开始的len个字符 |
clear() | 删除字符串中所有字符 |
s.replace(pos,n,str) | 把当前字符串从索引pos开始的n个字符替换为str |
s.replace(pos,n,n1,c) | 把当前字符串从索引pos开始的n个字符替换为n1个字符c |
s.replace(it1,it2,str) | 把当前字符串[it1,it2)区间替换为str it1 ,it2为迭代器哦 |
stoi(s) 将字符串 s 转化为 int 类型 stoll(s) 将字符串 s 转化为 long long int 类型 stod(s) 将字符串 s 转化为 double 类型 stold(s) 将字符串 s 转化为 long double 类型 s.push_back() | 在末尾插入 |
例:s.push_back('a') | 末尾插入一个字符a |
s.insert(pos,element) | 在pos位置插入element |
例:s.insert(s.begin(),'1') | 在第一个位置插入1字符 |
s.append(str) | 在s字符串结尾添加str字符串 |
例:s.append("abc") | 在s字符串末尾添加字符串“abc” |
s.substr(pos,n) 截取从pos索引开始的n个字符 s.find (str, pos) | 在当前字符串的pos索引位置(默认为0)开始,查找子串str,返回找到的位置索引,-1表示查找不到子串 |
s.find (c, pos) | 在当前字符串的pos索引位置(默认为0)开始,查找字符c,返回找到的位置索引,-1表示查找不到字符 |
s.rfind (str, pos) | 在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,-1表示查找不到子串 |
s.rfind (c,pos) | 在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符 |
s.find_first_of (str, pos) | 在当前字符串的pos索引位置(默认为0)开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符 |
s.find_first_not_of (str,pos) | 在当前字符串的pos索引位置(默认为0)开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符 |
s.find_last_of(str, pos) | 在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符 |
s.find_last_not_of ( str, pos) | 在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串 |
娄卫健的个人主页(新生实践课)
华中科技大学