STL
文章平均质量分 51
stl
free1993
这个作者很懒,什么都没留下…
展开
-
stl库的容器Container和迭代器iterator
container容器就是STL库里面的数据结构,一般的实现方式是类模版。目前STL库里面提供四种类别的容器,这四种类别的容器如下所示。iterator迭代器专门是为了容器服务的,是为了访问容器里面的元素。迭代器按照类别进行分类,分为五种。所有的迭代器都需要被构造、被销毁、被拷贝、复制拷贝。...原创 2021-07-21 11:50:54 · 260 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.m原创 2021-06-21 16:17:06 · 56 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例一输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]代码class CQueue {public: stack<int> s原创 2021-06-21 12:05:26 · 49 阅读 · 0 评论 -
迭代器
迭代器的分类array,vector,deque是randomlsit bidirexitonalforward-list forwardset/multiset/map/multimap:bidirectionalunoreder:底部hashtable,访问根据链表是单向还是双向原创 2021-04-27 15:28:11 · 44 阅读 · 0 评论 -
系列七 stack/queue
stack和queue底层都是封装了deque,然后调用部分deque的函数实现自己的功能,因为本质上来说stack和queue是单向变化的deque.stacktemplate<class T, class Sequence = stack<T> >class stack{ ...public: typedef typename Sequence::value_type value_type; typedef typename Sequence::size_type原创 2021-04-24 17:24:07 · 47 阅读 · 0 评论 -
系列六 deque(二)
操作符重载deque底层实际上是将元素在一段段内存中存储起来,然后每一段的起始地址是通过一个vector的数组进行管理的。为了实现逻辑上的连续,所以针对iterator的设计来说,是需要重载各种操作符的。首先现在这里说一下接下来经常看到的一个self,这个定义是typedef __deque_iterator self;其实就是iterator的别称。基本的函数reference operator*() const{return *cur;}pointer operator-> cons原创 2021-04-24 17:14:19 · 92 阅读 · 0 评论 -
系列五 deque(一)
deque双向队列deque。deque是一个双向开口的队列。deque底层实现逻辑deque在使用过程中看起来是一段连续的空间,在这个空间上元素都是顺序的存储的,我们可以获取其大小,取队首或者队尾的元素。但是在实际的实现过程中,deque并不是连续存储的,而是是通过分段存储存储元素。如图中所示,展示了五个段,每个段存储部分元素。然后每个段通过map来连接起来,map的底部是vector,vector里面存的是每个段的起始地址,将段之间连接起来。因此当段不够用的时候,申请一个新的段空间,然后将这原创 2021-04-24 11:24:22 · 173 阅读 · 0 评论 -
系列四 Array
arrayarray是静态数组,也就是一开始是直接分配大小的数组。声明template<typename _Tp, std::size_t _Nm>struct array{ typedef _Tp value_type; typedef _Tp* pointer; //iterator和vector的iterator是一样的,都是pointer类型 typedef value_type* iterator; //声明数组。 value_type _M_instance[_N原创 2021-04-24 10:00:09 · 56 阅读 · 0 评论 -
系列三 vector
定义相比较于array这种静态的数组来说,vector是一种可以动态增长的数组。vector可以保证数据在逻辑和物理上都是连续的,因此在原来的空间上,假设数组的空间不够,此时需要重新开辟空间,但是重新开辟的空间不一定和原空间是相连的,因此为了保证vector的数据的连续性,vector在扩容的时候是需要有数据的搬运过程的。class的声明template<class T, class Alloc = alloc>class vector{public: typedef T valu原创 2021-04-23 16:23:58 · 398 阅读 · 0 评论 -
系列一 萃取机-iterator traits
容器的迭代器的特征容器里面的六大部件中的算法和容器是通过iterator来连接的。对于迭代器来说,每个容器的迭代器可能会有不同的特性这个特性一般会有五个方面value_type:迭代器指向的容器中的元素的类型difference_type:迭代器之间距离的类型,对于只能前向移动的(iterator++,iterator+3)其移动的距离是unsigned int,对于双向(iterator–)起移动的距离是int。pointer:指针类型reference:引用类型iterator_cat原创 2021-04-23 16:21:14 · 164 阅读 · 0 评论