黑马程序员 2017 C++ STL 教程(STL 部分已完结)

基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接
专栏:本STL专栏目录


链接如下:

专栏:本STL专栏目录

1.1 STL基本概念

1.2 简单的STL案例

2.2 C++STL string容器详解
string是C++风格的字符串,就前期打算法比赛而言,用C语言风格cstring就够了???(被y总带的风格)

2.3 C++STL vector容器详解
动态数组

2.4 C++STL deque容器详解
双端数组,操作特点:在两端插入和删除效率都特别高,在指定位置插入,也会引起数据元素的移动,支持随机访问。

2.5 C++STL stack详解
规则:先进后出。
遍历 不提供迭代器 也不支持随机访问。

while(!stack.empty())//遍历方式
{
cout<<stack.top()<<endl;
stack.pop();
}

2.6 C++STL queue详解
规则:先进先出
不能遍历 不提供迭代器 也不支持随机访问

while(!queue.empty())//遍历方式
{
cout<<queue.front()<<endl;
queue.pop();
}

2.7 C++STL list容器详解
非常常用 stl中的双向链表
在任何位置扎入和删除效率都比较好,因为插入删除时候相对于数组来说,不需要移动元素。
缺点:不支持随机访问 因为费连续的内存空间,所以说为了保存节点和节点之间的前驱后继关系,需要额外的空间开销。

2.8 C++STL set/multiset容器详解(含pair)

// 队组pair 将两个值合并成一个值
pair<string,int> pair1;
make_pair("aaa",1);
pair3=pair1;

2.9 C++STL map/multimap容器详解
map相对于set区别,map具有键值和实值,所有元素根据键值自动排序。pair的第一元素被称为键值,第二元素被称为实值。map也是以红黑树为底层实现机制。

相关API概述

STL相关API概述
vector, 变长数组,倍增的思想
size() 返回元素个数
empty() 返回是否为空
clear() 清空
front()/back()
push_back()/pop_back()
begin()/end()
[]
支持比较运算,按字典序 pair<int, int>
first, 第一个元素
second, 第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(字典序) string,字符串
szie()/length() 返回字符串长度
empty()
clear()
substr(起始下标,(子串长度)) 返回子串
c_str() 返回字符串所在字符数组的起始地址 queue, 队列
size()
empty()
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素 priority_queue, 优先队列,默认是大根堆
push() 插入一个元素
top() 返回堆顶元素
pop() 弹出堆顶元素
定义成小根堆的方式:priority_queue<int, vector<int>, greater<int>> q; stack, 栈
size()
empty()
push() 向栈顶插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素 deque, 双端队列
size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()
[] set, map, multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列
size()
empty()
clear()
begin()/end()
++, -- 返回前驱和后继,时间复杂度 O(logn)    set/multiset
insert() 插入一个数
find() 查找一个数
count() 返回某一个数的个数
erase()
(1) 输入是一个数x,删除所有x O(k + logn)
(2) 输入一个迭代器,删除这个迭代器
lower_bound()/upper_bound()
lower_bound(x) 返回大于等于x的最小的数的迭代器
upper_bound(x) 返回大于x的最小的数的迭代器
   map/multimap
insert() 插入的数是一个pair
erase() 输入的参数是pair或者迭代器
find()
[] 时间复杂度是 O(logn)
lower_bound()/upper_bound() unordered_set, unordered_map, unordered_multiset, unordered_multimap, 哈希表
和上面类似,增删改查的时间复杂度是 O(1)
不支持 lower_bound()/upper_bound(), 迭代器的++,-- bitset, 圧位
bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[] count() 返回有多少个1 any() 判断是否至少有一个1
none() 判断是否全为0 set() 把所有位置成1
set(k, v) 将第k位变成v
reset() 把所有位变成0
flip() 等价于~
flip(k) 把第k位取反 作者:yxc
链接:https://www.acwing.com/blog/content/404/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

这里是引用


谢谢阅读(〃’ ▽ '〃)如有纰漏欢迎指出,觉得还不错就点个赞吧。

最新文章

  1. sed 命令使用
  2. 交换排序---快速排序算法(Javascript版)
  3. 线段树基础模板&amp;&amp;扫描线
  4. Arcgis Server 默认服务端口号修改方法
  5. sprintf()函数基本用法
  6. ie6,ie7兼容性总结(转)
  7. 解析Java中静态变量与实例变量的区别
  8. jQuery 遍历用法
  9. 【Markdown】Writing on Github - 在GitHub上写作
  10. zoj 1649 Rescue (BFS)(转载)
  11. 浅谈.Net和Java互相调用的三种方式
  12. XFS文件系统功能解析
  13. echarts实现上海地域PM值(map、timeline)
  14. (void)(&amp;amp;x==&amp;amp;y)
  15. 什么是IAT重定向
  16. #云栖大会# 移动安全专场——APP加固新方向(演讲速记)
  17. HDFS 简介
  18. AEAI CRM V1.6.0 升级说明,开源客户关系管理系统
  19. ES6的Proxy和Reflect
  20. 版本管理工具小乌龟TortoiseGit的安装和使用(2)

热门文章

  1. NSString 类介绍及用法
  2. 【web安全】Nodejs原型链污染分析
  3. MATLAB基础学习(3)——数值数组及运算
  4. Pytest用例编写1
  5. F WebDriver and 环境配置
  6. Sublime Text3安装及汉化
  7. MXNet学习:试用卷积-训练CIFAR-10数据集
  8. Solution -「ARC 104E」Random LIS
  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存
  10. 超详细的Cookie增删改查