C++容器语法过关

关于C++中STL容器的基本使用。

前置知识

min : 返回最小值(多个元素或集合)

max : 返回最大值(多个元素或集合)

abs : 返回整型绝对值

fabs: 返回浮点型绝对值(常用于浮点型精读确定)

swap: 交换两个基本数据类型或复杂数据类型

sort:

  1. sort(begin, end)按升序排序数组
  2. sort(begin, end, cmp)按返回值为 bool 型的 函数cmp 排序数组

vector

  1. vector <int> v(N,i): 创建一个长度为N,元素初始化为i的可变长度数组,

    (N,i)可省略(默认值为0),<int>可换为其他数据类型

  2. v.push_back(a): 将元素a插到数组v的末尾,并增加数组长度

  3. v.size(): 返回数组v的长度

  4. sort(v.begin(),v.end()): 排序vector内元素

  5. reverse(v.begin(),v.end()): 倒置vector内元素

  6. copy(v.begin(),v.end(),u.begin()+n): 将v复制到u.begin()+n

  7. find(v.begin(),v.end(),n): 在v中查找元素n,并返回n在v中的位置

string

  1. string s: 创建一个名为s的字符串变量
  2. s+=str: 在字符串s后拼接字符串str
  3. s>str: 比较s和str的字典序
  4. s.length(): 返回字符串s的长度
  5. s.replace(pos,len,str,[m],[n]): 将s从pos位置开始len长度的内容替换为字符串str从m到n位置的内容
  6. s.substr(pos,len): 返回指定区间子串
  7. s.fing(str,[pos]): 在字符串s中从第pos个字符开始寻找str,并返回位置,找不到返回-1
  8. to_string(): 将整型或浮点型转为字符串
  9. atoi() atof() : 分别将字符串转为整型与浮点型

queue

  1. queue <int> Q: 创建队列Q,元素为int
  2. Q.push(a): 将元素a插入队列Q末尾
  3. Q.pop(): 弹出Q队首元素
  4. Q.front(): 查询Q队首元素
  5. Q.back(): 查询Q队尾元素
  6. Q.size(): 查询Q元素个数
  7. Q.empty(): 查询Q是否为空

stack

  1. stack <int> s: 创建栈Q,元素为int
  2. s.push(a): 将元素a压入栈s
  3. s.pop(): 将s的栈顶元素弹出
  4. s.top(): 查询s的栈顶元素
  5. s.size(): 查询s的元素个数
  6. s.empty(): 查询s是否为空

set/unordered_set

set平衡二叉树 实现

unordered_setHash表 实现

以下情况用unordered_set:

  • 仅需要保存互异的元素而不需要排序
  • 只需要获取单个元素而不需要遍历
  1. set <int> ds: 创建一个名字叫ds,元素类型为int的集合
  2. ds.insert(x): 在集合中插入一个元素,如果这个元素已经存在,则什么都不干
  3. ds.erase(x): 在集合中删除元素x,如果这个元素不存在,则什么都不干
  4. ds.find(x): 查询x在集合中的地址,如果不存在,返回ds.end()
  5. ds.lower_bound(x): 查询不小于x的最小数在集合中的地址,如果不存在,返回ds.end()
  6. ds.upper_bound(x): 查询大于x的最小数在集合中的地址,如果不存在,返回ds.end()
  7. ds.empty(): 如果集合为空,返回1,否则返回0;
  8. ds.size(): 返回集合中的元素个数

map/unordered_map

map红黑树 实现

unordered_mapHash表 实现

选择:对于有顺序要求的问题,一般用map;对于查找类问题,一般用unordered_map

  1. map <A,B> ds: 建立一个名字叫做ds、下标类型为B的映射表,例如map <string,int> 就是一个将string映射到int的映射表
  2. ds[A]=B: 把这个“数组”中,下标为A的位置的值改成B
  3. ds[A]: 访问这个“数组”中,下标为A的元素
  4. ds.end(): 返回映射表中最后一个元素的下一个元素的地址
  5. ds.find(x): 查询x在映射表中的地址,若不存在,返回ds.end()
  6. ds.empty(): 如果映射表是空的,返回1,否则返回0
  7. ds.size(): 返回映射表中元素个数
  8. ds.erase(): 删除这个“数组”中下标为A的元素

注意:在使用ds[A]访问”数组”下标为A的元素时,如果这个下标对应的元素不存在,则会自动创建下标为A、值为默认值的元素