博客
关于我
第一周学习总结(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中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>