This is my study note of C++.

vector

初始化

  • vector<变量类型> 变量名
  • vector<变量类型> 变量名(数组长度)
  • vector<变量类型> 变量名(数组长度, 初始化数据)
  • vector<变量类型> 变量名(数组元素)
  • vector<变量类型> 变量名<相同变量类型的容器>
  • vector<变量类型> 变量名[行数] (注意此时行数不可变,列可变)
  • vector<vector<变量类型>> 变量名

函数方法

代码 含义
c.front() 返回第一个数据 O (1)
c.back() 返回最后一个数据 O (1)
c.pop_back() 删除最后一个数据 O(1)
c.push_back(element) 在尾部加一个数据 O(1)
c.size() 返回实际数据个数(unsigned类型) O(1)
c.clear() 清除元素个数 O(N),N为元素个数
c.resize(n,v) 改变数组大小为n,n个空间数值赋为v,如果没有默认赋值为0
c.insert(it,x) 向任意迭代器it插入一个元素x O(N)
例:c.insert(c.begin()+2,-1) 将-1插入c[2]的位置
c.erase(first,last) 删除[first,last)的所有元素
c.begin() 返回首元素的迭代器(通俗来说就是地址)
c.end() 返回最后一个元素后一个位置的迭代器(地址)
c.empty() 判断是否为空,为空返回真,反之返回假

访问

  • 下标法,跟普通数组一样访问
  • 迭代器法,类似指针一样的访问
    1
    2
    3
    4
    5
    vector<int>::iterator it = vi.beigin();
    for(it = vi.begin(); it != vi.end(); it++)
    {
    cout<<*it<<endl;
    }

stack栈

函数

栈只能对栈顶元素进行操作,先入后出。

代码 含义
push() 压栈,增加元素 O(1)
pop() 移除栈顶元素 O(1)
top() 取得栈顶元素(但不删除)O(1)
empty 检测栈内是否为空,空为真 O(1)
size() 返回stack内元素的个数 O(1)

queue队列

一种先进先出结构。

代码 含义
front() 返回队首元素 O(1)
back() 返回队尾元素 O(1)
push() 尾部添加一个元素副本 进队O(1)
pop() 删除第一个元素 出队 O(1)
size() 返回队列中元素个数,返回值类型unsigned int O(1)
empty() 判断是否为空,队列为空,返回true O(1)

deque

首尾都可插入和删除的队列。

代码 含义
push_back(x)/push_front(x) 把x压入后/前端
back()/front() 访问(不删除)后/前端元素
pop_back() pop_front() 删除后/前端元素
erase(iterator it) 删除双端队列中的某一个元素
erase(iterator first,iterator last) 删除双端队列中[first,last)中的元素
empty() 判断deque是否空
size() 返回deque的元素数量
clear() 清空deque

priority_queue(优先队列)

在正常队列的基础上加上了优先级,保证队首每次都是优先级最大的。

代码 含义
top() 访问队首元素
push() 入队
pop() 堆顶(队首)元素出队
size() 队列元素个数
empty() 是否为空

设置优先级

1
priority_queue<数据类型, vector<数据类型>, less<int>> pq;
  • 第二个参数,用于承载底层数据结构堆的容器
  • 第三个参数,less表示数字大优先级高,greater表示数字小,优先级高。

map

类似python的字典,一个键对应一个值。

代码 含义
mp.find(key) 返回键为key的映射的迭代器 O(logN) 注意:用find函数来定位数据出现位置,它返回一个迭代器。当数据存在时,返回数据所在位置的迭代器,数据不存在时,返回mp.end()
mp.erase(it) 删除迭代器对应的键和值O(1)
mp.erase(key) 根据映射的键删除键和值 O(logN)
mp.erase(first,last) 删除左闭右开区间迭代器对应的键和值 O(last-first)
mp.size() 返回映射的对数 O(1)
mp.clear() 清空map中的所有元素 O(N)
mp.insert() 插入元素,插入时要构造键值对
mp.empty() 如果map为空,返回true,否则返回false
mp.begin() 返回指向map第一个元素的迭代器(地址)
mp.end() 返回指向map尾部的迭代器(最后一个元素的下一个地址)
mp.rbegin() 返回指向map最后一个元素的反向迭代器(地址)
mp.rend() 返回指向map第一个元素前面(上一个)的反向迭代器(地址)
mp.count(key) 查看元素是否存在,因为map中键是唯一的,所以存在返回1,不存在返回0
mp.lower_bound() 返回一个迭代器,指向键值>= key的第一个元素
mp.upper_bound() 返回一个迭代器,指向键值> key的第一个元素

set集合

set中的元素不会重复,并自动从小到达排序。

代码 含义
s.begin() 返回set容器的第一个元素的地址(迭代器)
s.end() 返回set容器的最后一个元素的下一个地址(迭代器)
s.rbegin() 返回逆序迭代器,指向容器元素最后一个位置
s.rend() 返回逆序迭代器,指向容器第一个元素前面的位置
s.clear() 删除set容器中的所有的元素,返回unsigned int类型O(N)
s.empty() 判断set容器是否为空
s.insert() 插入一个元素
s.size() 返回当前set容器中的元素个数O(1)
erase(iterator) 删除定位器iterator指向的值
erase(first,second) 删除定位器first和second之间的值
erase(key_value) 删除键值key_value的值
s.find(元素) 查找set中的某一元素,有则返回该元素对应的迭代器,无则返回结束迭代器
s.lower_bound(k) 返回大于等于k的第一个元素的迭代器
s.upper_bound(k) 返回大于k的第一个元素的迭代器

pair

只能包含两个元素,可以看作是两个元素的结构体。
pair<int, string> p(1, “pair”);

bitset

bitset 在 bitset 头文件中,它类似数组,并且每一个元素只能是0或1,每个元素只用1bit空间。

代码 含义
bitset < n >a; a有n位,每位都为0
bitset < n >a(b); a是unsigned long型u的一个副本
bitset < n >a(s); a是string对象s中含有的位串的副本
bitset < n >a(s,pos,n); a是s中从位置pos开始的n个位的副本