【黑马程序员C++ STL】学习记录

黑马程序员 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 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

在这里插入图片描述

这里是引用

在这里插入图片描述


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

posted @ 2022-03-05 22:54  zi_mei  阅读(152)  评论(1)    收藏  举报