
STL
文章平均质量分 88
自首的小偷
这个作者很懒,什么都没留下…
展开
-
[C/C++ -STL]仿函数及priority_queue深度剖析
一、priority_queue介绍及使用1 priority_queue的介绍文档介绍 1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4. 底层容器可以是任何标准.原创 2021-11-30 22:16:09 · 1034 阅读 · 16 评论 -
[C/C++ -STL]容器适配器(stack/queue)的深入探索
一、stack介绍及使用 stack文档介绍1 stack定义:template <class T, class Container = deque > class stack;这是文档给出的定以stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即.原创 2021-11-29 21:42:55 · 439 阅读 · 10 评论 -
[C/C++ -STL]list模拟实现及list迭代器底层刨析
一、list底层实现机制刨析 前面在讲 STL list 容器时提到,该容器的底层是用双向链表实现的,甚至一些 STL 版本中(比如 SGI STL),list 容器的底层实现使用的是双向循环链表图 1 双向链表( a) )和双向循环链表( b) )图 1 中,node 表示链表的头指针。如图 1 所示,使用链表存储数据,并不会将它们存储到一整块连续的内存空间中。恰恰相反,各元素占用的存储空间(又称为节点)是独立的、分散的,它们之间的线性关系通过指针(图 1 以箭头表示)来维持。通过图 1 可.原创 2021-11-27 11:38:30 · 1085 阅读 · 16 评论 -
[C/C++ -STL]list使用及vector和list迭代器失效问题比较
一、List认识介绍什么是listtemplate < class T, class Alloc = allocator<T> > class list;这是文档给出的定义所以什么是List?List是序列容器,允许在序列中的任意位置执行固定时间的插入和擦除操作,并在两个方向上进行迭代。它们与forward_list非常相似:主要区别在于forward_list对象是单链表,因此它们只能向前迭代,以换取更小和更高效与其他基本标准序列容器(array、vector和de原创 2021-11-22 22:16:44 · 1375 阅读 · 7 评论 -
[C/C++ -STL]vector底层实现机制刨析
一、vector底层实现机制刨析通过分析 vector 容器的源代码不难发现,它就是使用 3 个迭代器(可以理解成指针)来表示的:其中statrt指向vector 容器对象的起始字节位置;finish指向当前最后一个元素的末尾字节end_of指向整个 vector 容器所占用内存空间的末尾字节。如图 演示了以上这 3 个迭代器分别指向的位置如图 演示了以上这 2个迭代器分别指向的位置在此基础上,将 3 个迭代器两两结合,还可以表达不同的含义,例如:start 和 finish 可以用来表原创 2021-11-21 23:39:53 · 8551 阅读 · 10 评论 -
[C/C++ -STL]vector使用及迭代器失效问题详解
一、vector介绍 vector文档介绍Vector 是序列容器,表示可以改变大小的数组。与数组一样,Vector使用其元素的连续存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中一样高效。但与阵列不同的是,它们的大小可以动态变化,其存储由容器自动处理。在内部,Vector 使用动态分配的数组来存储其元素。当插入新元素时,可能需要重新分配此数组以增大其大小,这意味着分配一个新数组并将所有元素移动到该数组中。就处理时间而言,这是一项相对昂贵的任务,因此,向量不会在每原创 2021-11-20 22:01:13 · 6120 阅读 · 9 评论 -
C++ string现代写法
一、现代写法实现接口 首先是拷贝构造的现代写法的实现: string_str(const string_str& st) :str(nullptr) { string_str tem(st.str); swap(this->str, tem.str); 首先先把this->str置空,temp调用构造函数,用st.str初始化this->str这样就形成一个临时对象,通过swap 然后把this->str和tem.str互换,这样两个对象指向的.原创 2021-11-18 22:32:20 · 4418 阅读 · 15 评论 -
C++ string底层原理
一、深浅拷贝浅拷贝:在实现string时要是不实先string拷贝构造,会自动生成一个拷贝构造函数,但是他只是一个浅拷贝。两个string对象指向同一个地址,在两个对象调用析构函数是,前一个对象调用的析构函数已经释放了这个地址的内从,而后一个会重复释放该块空间,导致出错。会触发断点,然后报错.class string{public:/*string():_str(new char[1]){*_str = '\0';}*///string(const char* str = "\0"原创 2021-11-18 00:00:02 · 6384 阅读 · 13 评论 -
C++ string的深入理解
一、String类介绍(说明)string的文档介绍字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_string)。string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和all原创 2021-11-16 21:44:16 · 2590 阅读 · 10 评论