关于C++中STL容器的基本使用。
前置知识
min
: 返回最小值(多个元素或集合)
max
: 返回最大值(多个元素或集合)
abs
: 返回整型绝对值
fabs
: 返回浮点型绝对值(常用于浮点型精读确定)
swap
: 交换两个基本数据类型或复杂数据类型
sort
:
sort(begin, end)
按升序排序数组sort(begin, end, cmp)
按返回值为 bool 型的 函数cmp 排序数组
vector
vector <int> v(N,i)
: 创建一个长度为N,元素初始化为i的可变长度数组,(N,i)
可省略(默认值为0),<int>
可换为其他数据类型v.push_back(a)
: 将元素a插到数组v的末尾,并增加数组长度v.size()
: 返回数组v的长度sort(v.begin(),v.end())
: 排序vector内元素reverse(v.begin(),v.end())
: 倒置vector内元素copy(v.begin(),v.end(),u.begin()+n)
: 将v复制到u.begin()+n
处find(v.begin(),v.end(),n)
: 在v中查找元素n,并返回n在v中的位置
string
string s
: 创建一个名为s的字符串变量s+=str
: 在字符串s后拼接字符串strs>str
: 比较s和str的字典序s.length()
: 返回字符串s的长度s.replace(pos,len,str,[m],[n])
: 将s从pos位置开始len长度的内容替换为字符串str从m到n位置的内容s.substr(pos,len)
: 返回指定区间子串s.fing(str,[pos])
: 在字符串s中从第pos个字符开始寻找str,并返回位置,找不到返回-1to_string()
: 将整型或浮点型转为字符串atoi()
atof()
: 分别将字符串转为整型与浮点型
queue
queue <int> Q
: 创建队列Q,元素为intQ.push(a)
: 将元素a插入队列Q末尾Q.pop()
: 弹出Q队首元素Q.front()
: 查询Q队首元素Q.back()
: 查询Q队尾元素Q.size()
: 查询Q元素个数Q.empty()
: 查询Q是否为空
stack
stack <int> s
: 创建栈Q,元素为ints.push(a)
: 将元素a压入栈ss.pop()
: 将s的栈顶元素弹出s.top()
: 查询s的栈顶元素s.size()
: 查询s的元素个数s.empty()
: 查询s是否为空
set/unordered_set
set 由 平衡二叉树 实现
unordered_set 由 Hash表 实现
以下情况用unordered_set:
- 仅需要保存互异的元素而不需要排序
- 只需要获取单个元素而不需要遍历
set <int> ds
: 创建一个名字叫ds,元素类型为int的集合ds.insert(x)
: 在集合中插入一个元素,如果这个元素已经存在,则什么都不干ds.erase(x)
: 在集合中删除元素x,如果这个元素不存在,则什么都不干ds.find(x)
: 查询x在集合中的地址,如果不存在,返回ds.end()
ds.lower_bound(x)
: 查询不小于x的最小数在集合中的地址,如果不存在,返回ds.end()
ds.upper_bound(x)
: 查询大于x的最小数在集合中的地址,如果不存在,返回ds.end()
ds.empty()
: 如果集合为空,返回1,否则返回0;ds.size()
: 返回集合中的元素个数
map/unordered_map
map 由 红黑树 实现
unordered_map 由 Hash表 实现
选择:对于有顺序要求的问题,一般用map;对于查找类问题,一般用unordered_map
map <A,B> ds
: 建立一个名字叫做ds、下标类型为B的映射表,例如map <string,int>
就是一个将string映射到int的映射表ds[A]=B
: 把这个“数组”中,下标为A的位置的值改成Bds[A]
: 访问这个“数组”中,下标为A的元素ds.end()
: 返回映射表中最后一个元素的下一个元素的地址ds.find(x)
: 查询x在映射表中的地址,若不存在,返回ds.end()
ds.empty()
: 如果映射表是空的,返回1,否则返回0ds.size()
: 返回映射表中元素个数ds.erase()
: 删除这个“数组”中下标为A的元素
注意:在使用ds[A]
访问”数组”下标为A的元素时,如果这个下标对应的元素不存在,则会自动创建下标为A、值为默认值的元素