STL
JMW1407
这个作者很懒,什么都没留下…
展开
-
map和unordered_map的使用和差别?unordered_map查询效率这么高,为啥还需要map?
map和unordered_map的差别和使用?map和unordered_map的差别和使用?1、map的基本使用操作2、unordered_map的基本使用操作3、map和unordered_map的差别和使用场景参考map和unordered_map的差别和使用?map和unordered_map都是c++中可以充当字典(key-value)来用的数据类型,但是其基本实现是不一样的。1、map的基本使用操作map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树原创 2020-08-24 09:07:37 · 2554 阅读 · 0 评论 -
vector如何避免多次不必要的扩容带来的性能损失(reserve函数的调用)
vector如何避免不必要的扩容vector如何避免不必要的扩容1、vector数据结构性质2、push_back后iterator失效程序崩溃的原因3、reserve()避免多次不必要的扩容参考vector如何避免不必要的扩容1、vector数据结构性质vector占用一块连续分配的内存,一种可以存储任意类型的动态数组,与array不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。v原创 2020-08-23 08:24:51 · 3482 阅读 · 0 评论 -
C++ 标准模板库(STL)——适配器(Adaptor)
适配器Adaptor适配器1、背景2、定义3、类型3.1、容器适配器(container adaptor)3.1.1、stack3.1.2、queue3.2、仿函数适配器(function adaptor)3.2.1、bind1st,bind2nd(适配器绑定)3.2.1.1、bind2nd3.2.1.2、bind1st(和binder2nd()类似)3.2.1.3、bind(C++11)3.2.2、not1()、not2()(函数的返回值取否)3.2.3、compose1()、compose2()(仿函数原创 2020-07-05 23:40:27 · 1783 阅读 · 0 评论 -
C++ 标准模板库(STL)——仿函数(functors)
仿函数functors仿函数(函数对象)1、背景2、定义3、类型3.1、操作数个数划分3.1.1、一元仿函数基类(unary_function)3.1.2、二元仿函数基类(binary_function)3.2、功能划分3.2.1、算术运算3.2.2、关系运算类3.2.3、逻辑运算类4、仿函数适配器4.1 应用举例:将仿函数某个参数绑定为固定值的适配器5、函数指针、仿函数、Lambda表达式在同一场景下的使用示例参考仿函数(函数对象)1、背景有些功能实现的代码,会不断的在不同的成员函数中用到,但是又原创 2020-07-04 23:50:33 · 6307 阅读 · 0 评论 -
C++ 标准模板库(STL)——迭代器、迭代器类型以及序列式,关联容器迭代器失效问题(iterator)
迭代器iterator迭代器iterator1、定义2、iterator中typedef的型别(iter_traits)3、iterator的五种类型3.1、Output iteator(只写)4、iterator_category 对算法的影响参考迭代器iterator1、定义Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模原创 2020-07-02 23:48:53 · 771 阅读 · 0 评论 -
C++ 标准模板库(STL)_有序关联容器—— map + multimap(侯捷老师)
STL—— map + multimapmap + multimap1、map + multimap定义1.1、 map定义1.1.1、 map特征1.2、 multimap定义1.3、 map结构部分源码map + multimap1、map + multimap定义注意map的key的属性是const1.1、 map定义#include<map>map的每一个元素都拥有两个值,一个键值(key)和一个实值(value)。可理解为“{键,值}对”。例如,学生的“学号”与“姓原创 2020-06-27 22:35:48 · 529 阅读 · 0 评论 -
C++ 标准模板库(STL)_有序关联容器—— set +multiset(迭代器失效问题)(侯捷老师)
STL—— set+multisetSet + multiset1、顺序(序列式)容器和关联容器1.1、顺序容器和关联容器定义1.2、顺序容器和关联容器分类2、set + multiset定义2.1、 set 定义2.1.1、 set 特点2.1.2、 插入效率和迭代器失效问题说明2.2、 multiset 定义3、RB-tree结点的定义3.1、rb_tree结构定义部分源码3.1.1、__rb_tree_node_base定义部分源码4、Set结构部分源码5、multiset结构部分源码6、set常见操原创 2020-06-24 18:21:07 · 501 阅读 · 0 评论 -
C++ 标准模板库(STL)_序列式容器—— deque(模拟连续空间)(侯捷老师)
STL—— deque双端队列——deque1、定义2、特点3、deque节点结构(数据组织形式)4、deque数据结构部分源码定义5、初始化map部分源码6、__deque_iterator 源码定义6.1、迭代器失效问题7、push_front()、push_back()源码8、pop_front() 、pop_back()源码9、deque::insert()源码10、deque如何模拟连续空间11、deque常见操作和应用11.1 构造和赋值11.2 定位和索引11.3 empty()、size()原创 2020-06-23 22:45:32 · 519 阅读 · 0 评论 -
C++ 标准模板库(STL)_序列式容器——Vector以及扩容操作(侯捷老师)
STL—— Vector容器Vector1、定义2、数据结构3、vector成倍扩容过程及部分源码3.1、扩容条件3.2、扩容步骤(3步)3.3、扩容操作部分源码( insert_aux ) ——push_back() + insert()4、vector基本用法4.1 vector容器构造函数4.2 增加函数(push_back + insert)4.3 删除函数4.4 其他常用4.5 vector常用算法参考Vector#include<vector>1、定义vector占原创 2020-06-22 22:29:53 · 1304 阅读 · 0 评论 -
C++ 标准模板库(STL)_iterator—— Traits(侯捷老师)
iterator——TraitsTraits1、产生背景2、定义2.1 iterator_traits中定义的class iterators2.1 iterator_traits中定义的non-class iterators3、内嵌类型声明3.1、以迭代器所指对象的类型声明局部变量3.2、以迭代器所指对象的类型声明返回类型4、value_type4.1、提取以及偏特化5、difference type6、迭代器部分源码参考Traits1、产生背景在实际应用中,迭代器是容器和算法之间的桥梁。将范型算原创 2020-06-21 23:11:26 · 1024 阅读 · 0 评论 -
C++ 标准模板库(STL)_序列式容器—— List容器(侯捷老师)
STL—— List容器List1、定义2、特点2、List部分源码(G2.9版本 )3、list节点结构4、list数据结构5、list迭代器结构6、list构造函数7、List的其他操作函数7.1 get_node7.2 put_node7.3 create_node7.4 destory_node7.5 insert7.6 push_back、push_front7.7 pop_back、pop_front7.8 earse7.9 clear参考List#include<list>原创 2020-06-20 23:06:30 · 557 阅读 · 0 评论 -
C++ 标准模板库(STL)——空间分配器(allocator)
空间分配器allocator分配器allocator1、背景2、定义3、 最简单的实现4、使用步骤5、应用举例参考分配器allocator#include <memory>//用于标准库中的STL containers1、背景分配器顾名思义,分配空间内存。在C++中,分配单个对象时,通常希望将内存分配和对象初始化组合在一起。一个对象的内存配置和释放(new、delete)一般都包含以下步骤:new(new[]),首先是调用operator new(new[])来配置内存,然后调用原创 2020-06-20 12:46:31 · 2685 阅读 · 0 评论