《C++Primer》读书笔记——第9章 顺序容器

时间:2022-04-07 04:26:07
  1. 顺序容器类型
    vector 可变大小数组
    deque 双端队列
    list 双向列表
    forward_list 单向列表【C++11新增】
    array 固定大小数组【C++11新增】
    string 与vector相似的容器,但专门用于保存字符
  2. 顺序容器选取原则:通常选用vector是最好的选择,除非你有很好的理由选择其他容器
  3. 容器操作
    1. 容器定义 and 初始化
      C c;
      C c1(c2);
      C c1 = c2;
      C c(b, e);构造c,将迭代器b和e指定范围内的元素拷贝到c
      C c{a, b, c…};列表初始化c
      C c = {a, b, c,…};
      C seq(n);【注意:string不适用】
      C seq(n, t);
    2. 赋值与swap
      c1 = c2 将c1中的元素替换为c2中的元素
      c1 = {a, b, c…} 将c1中的元素替换为列表中元素
      swap(c1, c2) 与c1.swap(c2)等价
      seq.assign(b, e)【注意:只适用array外的顺序容器,关联容器不适用,如map】
      seq.assign(i1)
      seq.assign(n, t)
    3. 大小
      c.size()
      c.empty()
    4. 添加/删除元素
      c.insert(args) 将args中的元素拷贝进c
      c.emplace(inits) 使用inits构造c中的一个元素
      c.eraze(args) 删除args指定的元素
      c.clear() 删除c中的所有元素,返回void
    5. 获取迭代器
      c.begin() c.end()
    6. 反向容器的额外成员
      reverse_iterator 按逆序寻址元素的迭代器
      c.rbegin() c.rend()指向c的尾元素和首元素之前位置的迭代器
  4. 迭代器范围:[begin, end) 左闭合区间
    while(begin != end) {
    *begin = val;
    ++begin;
    }
  5. 顺序容器操作
    1. 添加元素c.push_back(t)
    2. 访问元素
      c[n] 返回下标为n的元素的引用
      c.at(n) 返回下标为n的元素的引用
      c.back() 返回尾元素的引用
      c.front() 返回首元素的引用
    3. 删除元素
      c.pop_back() 删除尾元素
      c.pop_front() 删除首元素
      c.erase(p) 删除迭代器指定的元素
      c.erase(b, e) 删除迭代器指定的元素
      c.clear() 删除c的所有元素
    4. 改变容器大小
      c.resize(n) 调整为n
      c.resize(n, t) 调整为n,新增的都赋值t
  6. 额外的string操作
    1. 构造string的其他方法
      string s(cp, n) s是cp执行的数组中 前n个字符的拷贝
      string s(s2, pos) s是s2的从下标pos开始的拷贝
      string s(s2, pos, len) s是s2的从下标pos开始 长度为len的拷贝
      子字符串操作
      s.substr(pos, n) n默认为s.size()-pos
    2. 改变string的其他方法
      除了接收迭代器的insert和erase操作外,string还提供了接受下标的版本
      s.insert(pos, args) 在pos前插入args指定的字符
      s.erase(pos, len) 删除从pos开始的len个元素
      s.assign(args) 将s替换为args
      s.append(args) s后追加agrs
      s.replace(range, args) 删除s中范围range内的字符,替换为args。range = pos, len
      args可为一下形式之一:
      str
      str, pos, len
      cp, len cp的前len个字符
      cp
      n, c
      b, e
      {a,b,c…}
    3. string搜索操作
      s.find(args) 第一次出现
      s.rfind(args) 最后一次出现
      s.find_first_of(args) 第一次出现args中任何一个字符
      s.find_last_of(args) 最后一次出现args中任何一个字符
      s.find_first_not_of(args) 第一次出现不在args中任何一个字符
      s.find_last_not_of(args) 最后一次出现不在args中任何一个字符
    4. compare函数
    5. 数值转换
      • val转string
        to_string(val)
      • string转整形
        stoi(s, p, b) b默认为10进制,p默认为0
        stol(s, p, b)
        stoul(s, p, b)
        stoll(s, p, b)
        stoull(s, p, b)
      • string转浮点数
        stof(s, p)
        stod(s, p)
        stold(s, p)
  7. 容器适配器
    除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue、priority_queue。
    容器、迭代器、和函数都有适配器