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

本文共 2964 字,大约阅读时间需要 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 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 四种存储引擎
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>