博客
关于我
第一周学习总结(STL)
阅读量:683 次
发布时间:2019-03-17

本文共 2953 字,大约阅读时间需要 9 分钟。

第一周学习STL

STL学习总结

字符串(string)

  • 头文件:<string>

  • 定义:string

  • 访问:

    • 下标访问:范围从0到s.size()-1
    • 迭代器访问
  • 常用操作:

    • 图片此处无法显示,建议手动查阅相关资料。

栈(stack)

  • 头文件:<stack>

  • 定义:stack<data_type> stack_name;

  • 操作:

    • s.empty():返回布尔类型,表示栈内是否为空
    • s.size():返回栈元素个数
    • s.top():返回栈顶元素
    • s.pop():移除栈顶元素
    • s.push(a):向栈内压入一个元素a
  • 先进后出

队列(queue)

  • 头文件:<queue>

  • 定义:queue<data_type> queue_name;

  • 操作:

    • q.empty():返回布尔类型,表示队列是否为空
    • q.size():返回队列内元素个数
    • q.front():返回队列内的下一个元素(第一个元素)
    • q.back():返回队列内的最后一个元素
    • q.pop():移除队列中的一个元素(只能在队首移除)
    • q.push(a):将一个元素a置入队列中(只能在队尾加入)

向量(vector)

  • 头文件:<vector>

  • 定义:vector<data_type> vector_name;

  • 常用操作:

    • v.empty():返回布尔类型,表示向量内是否为空
    • v.size():返回向量内元素个数
    • v.push_back(a):将元素a插入最尾端
    • v.pop_back():将最尾端元素删除
    • v.front():返回第一个位置
    • v.back():返回最后一个位置
    • v.clear():清空向量
    • v.insert(pos):以指定位置插入新元素
    • v.insert(use_global Increments):可以选择以当前位置插入或指定区间插入
    • 直接通过向量索引访问数组元素,v[i]

优先队列(priority_queue)

  • 优先队列按照元素权值自动排序,权值最高排在前面

  • 头文件:<queue>

  • 定义:priority_queue<data_type> priority_queue_name;

  • 常用操作:

    • q.push(elem):将元素elem置入优先队列
    • q.top():返回优先队列的下一个元素
    • q.pop():移除一个元素
    • q.size():返回优先队列中元素的个数
    • q.empty():返回优先队列是否为空
    • q.back():返回q的末尾元素
    • lessgreater优先队列,less为大到小排序,greater为小到大

集合(set)与多重集合(multiset)

  • setmultiset根据特定排序准则自动排序,set不允许重复元素,multiset允许重复

  • 头文件:<set>

  • 定义:set<data_type> set_name;

  • 常用操作:

    • s.insert(elem):插入一个元素elem副本,返回新元素的位置
    • s.erase(elem):移除与elem元素相等的所有元素,返回被移除的元素个数
    • s.erase(pos):移除迭代器pos指向的位置元素,无返回值
    • s.clear():移除全部元素,清空容器
    • s.size():返回集合大小
    • s.empty():返回集合是否为空
    • s.count(elem):统计元素值为elem的元素个数
    • s.lower_bound(elem):返回第一个大于等于elem的元素位置
    • s.upper_bound(elem):返回第一个大于elem的元素位置
    • s.begin():返回双向迭代器,指向第一个元素
    • s.end():返回双向迭代器,指向最后一个元素的下一个位置

映射(map)

  • 所有元素根据键值自动生成排序

  • 不允许两个元素具有相同的键值

  • 头文件:<map>

  • 常用操作:

    • m.size():返回映射大小
    • m.empty():返回映射是否为空
    • m.count(value):统计实值等于value的元素个数
    • m.find(value):返回键值为value元素的位置
    • m.lower_bound(key):返回键值等于key的元素的第一个可插入位置
    • m.upper_bound(key):返回键值等于key的元素的最后一个可插入位置
    • m.begin():返回双向迭代器,指向第一个元素
    • m.end():返回双向迭代器,指向最后一个元素的下一个位置
    • m.clear():清空映射
    • m.erase(elem):移除键值为elem的所有元素
    • m.erase(pos):移除迭代器pos指向的位置元素
    • m[key] = value:查找键值为key时,若不存在则插入键值为key且实值为value的元素
    • m.insert(e):插入一个元素e

对(pair)

  • Pair结构可以包含两个不同数据类型的元素

  • 头文件:<utility>

  • 定义:pair<data_type1, data_type2> pair_name;

  • 常用操作:

    • pair(data_type1, data_type2):构造一个pair元素,分别取data_type1和data_type2
    • pair(p):生成另一个同型pair的副本
    • firstsecond公用函数访问各个元素,读写均支持

重载运算符

  • 运算符重载的形式是:
    返回值类型 operator 运算符(形参表){} 或者 返回值类型 operator 运算符(形参表){}
  • 重载">"或"<"可根据需求确定

示例:

类Student中定义">"运算符:

bool operator>(const Student& p) {    if(score > p.score)        return true;    else if(score == p.score && name < p.name)        return true;    else        return false;}

如何重新定义”

关键技巧

以下代码片段可以替代常见的using namespace std;

#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)#define rep(i, a, n) for(int i = a; i <= n; ++i)

常见的常见技巧:

  • 输入方式优化:可以使用sync_with_stdio(false);tie(0)来提高输入输出速度
  • 判断文件输入时,使用std::sync_with_stdio(false);禁用缓冲系统,采用std::ifstream读取数据
  • 常用宏定义rep循环结构代替传统的for循环,适合大量数据处理
  • 定义一种长整型类型:
    const int INF = 0x3F3F3F3F;  //无穷大typedef long long ll;      //长整型

这篇文章主要总结了本周学习的STL相关内容,涵盖了一些常用容器的定义、操作及其使用方法。下周将继续深入学习,细化一些容器的使用技巧,并完善对算法思想的理解。希望通过不断的练习和学习,在比赛中锻炼自己的ARC能力,在团队中发挥重要作用。

转载地址:http://pugqz.baihongyu.com/

你可能感兴趣的文章
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>