博客
关于我
第一周学习总结(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 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>
【Java基础】什么是面向对象?
查看>>
mysql 查询,正数降序排序,负数升序排序
查看>>
MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
查看>>
mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
查看>>