
STL
文章平均质量分 67
五道口纳什
wx公众号/B站:五道口纳什
展开
-
C++STL::两种方式实现STL容器的reference语义
使用智能指针使用reference wrapper原创 2015-11-17 09:44:47 · 1843 阅读 · 0 评论 -
标准模板库(STL)之 list 列传
list 使用一个 double-linked list (双向链表)来管理元素。只有运用迭代器,才能够访问 list 中的各个元素。也即 list 不支持operator []运算符重载(不开放在这样的接口给用户的目的也恰在于这不是一个高效的访问 list 中元素的方式)。list vs vector空间的利用相较于 vector 的连续线性空间,list 要复杂很多。它的好处在于每次元素的插入原创 2016-02-29 20:46:36 · 1004 阅读 · 0 评论 -
标准模板库(STL)之 map 列传
1. 模板参数2. 元素的插入与移除(inserting and removing)3. 排序规则只返回true/false,map容器如何实现查重与去重4. 迭代器类型原创 2016-02-29 17:23:51 · 1605 阅读 · 0 评论 -
标准模板库(STL)之无序容器列传
无序容器(unordered container)。(1)相比于 (multi)set 和 (multi)map,无序容器不需要排序准则;(2)相比于序列式容器,不存在语义将元素放置在指定位置;原创 2016-04-08 09:57:26 · 1060 阅读 · 0 评论 -
标准模板库(STL)之 priority_queue 列传
priority_queue 优先级队列,归根结底还是 queue,还是队列,只允许在尾部进入,并从头部取出元素,除此之外别无其他存取元素的途径。缺省情况下,priority_queue 利用一个 max_heap 完成,max_heap 是一个以 vector 实现的 complete binary tree。max_heap 可以满足 priority_queue 所需要的“依权值高低自动递减原创 2016-04-08 11:10:00 · 1050 阅读 · 0 评论 -
标准模板库(STL)之 map 列传 (三)
判断 map 容器是否存在某 key 的方法m.find(key) != m.end();return m[key]对于一个 map 容器,先判断键值是否存在,就直接返回,恰因为不会保错,返回 Value 的默认值,而容易引发逻辑错误。需首先判断 key 是否存在,可用 find() 判断是否存在该 key:m.find(key) == m.end();所以:assert(m.find(key) !原创 2016-03-17 18:58:43 · 1009 阅读 · 0 评论 -
[面试] C++ STL(一)—— 向一个vector中添加N个元素,平均的添加的性能是?
考虑如下的代码输出:int N = 100;vector<int> v;set<int> s;for (int i = 0; i < N; ++i){ s.insert(v.capacity()); v.push_back(i);}for (auto& e : s) cout << e << " ";cout << endl;可以看到空间的变化是0,1,2,4,原创 2016-03-28 09:38:13 · 5759 阅读 · 0 评论 -
标准模板库(STL)之 queue 列传
四个核心接口(1)push(尾部入队)(2)pop(头部出队)(3)front(查看头部)(4)back(查看尾部)其与 stack 相比,除了入队、出队的形式不同之外,queue 比stack 多了一个查看头部和尾部元素的方法,而 stack 仅可查看栈顶;;原创 2016-04-10 19:29:58 · 937 阅读 · 0 评论 -
标准模板库(STL)之算法篇 —— lower_bound/upper_bound
无论是 lower_bound 还是 upper_bound 都作用于有序区间。也即事先需要对无需序列进行排序。1. lower_bound其返回值是:在不破坏排序状态的原则下,可插入 value 的第一个位置。2. upper_bound其返回值是:在不破坏排序状态的原则下,可插入 value 的最后一个位置。原创 2016-06-13 22:41:48 · 1364 阅读 · 0 评论 -
标准模板库 STL 使用之 —— vector 使用 tricks
1. 从已有 vector(或数组)中复制vector<int> a{....};int an = a.size();int half = an/2;vector<int> a0(a.begin(), a.begin()+half);vector<int> a1(a.begin()+half, a.end());原创 2016-09-06 17:13:40 · 1066 阅读 · 0 评论 -
标准模板库(STL)之 vector 列传
1. erase() 成员函数的两个重载1. resize()1. 大小(size())和容量(capacity())的区别,以及它们对vector效率的影响2. 内存重新分配的弊端原创 2016-02-01 23:18:26 · 1034 阅读 · 0 评论 -
标准模板库(STL)之 vector 列传 (二)
1. 两种搭配2. 容器为空的判断3. 所能容纳的数据类型4. push_back一个新元素5. .resize() 的两个重载6. .clear()的含义原创 2016-02-24 10:31:57 · 1274 阅读 · 0 评论 -
STL 中的容器们(四)
STL 中的容器们 find(查找)函数的返回值的判断对于 STL 容器的find成员函数(其实好像也只有set才支持find成员函数)或者字符串string丰富的查找接口(find、find_first_of、find_last_of。。。)以及<algorithm>提供的全局的find函数(搭配容器使用),在调用之后,首选进行的操作应是,查找成功与否的判断,这是一切后续操作的前提。对strin原创 2016-02-25 18:35:26 · 986 阅读 · 0 评论 -
标准模板库(STL) map —— 初始化问题
map 容器没有:.reverse成员;map 是关联式容器,会根据元素的键值自动排序;map 容器不是连续的线性空间; 标准 STL 使用 RB-tree 为底层机制 ⇒ 自动排序(关于键值);1. 关于 map 的初始化问题map<int, bool> m;原创 2016-09-18 17:12:58 · 3213 阅读 · 0 评论 -
STL 中的容器们 (二)
STL 中的容器们 容器最后一个元素的迭代器我们知道容器:.begin():第一个元素coll[0]的迭代器.end():最后一个元素之前的元素的迭代器所以容器最后一个元素的迭代器为:coll.end()-1;序列式容器 vs 关联式容器 两大类型的容器的一大区别在于:所谓序列式是允许用下标索引(operator[])的;所谓关联式下表索引是无意义的,对map容器而言,虽然重载了op原创 2016-02-28 21:53:34 · 979 阅读 · 0 评论 -
标准模板库(STL)之配接器(Adapter)
一般只有一个私有成员变量(某物)的类,且其全部的成员函数都是对该唯一的成员变量的存、取和修改(实现修改某物接口,形成另一种风貌,侯捷语),则该类即为对该私有成员变量的配接(adapter)。Adapter 这一概念,也是一种设计模式(design pattern),《Design Patterns》对 Adapter 设计模式的定义如下:将一个 class 的接口转换为另一个 class 的接口,原创 2016-03-20 00:11:52 · 2327 阅读 · 0 评论 -
STL 算法接口及用法说明 (二)
copy原创 2016-03-20 00:17:23 · 1347 阅读 · 0 评论 -
发现大师们的错误
人生一大乐趣,发现大师的bug、原创 2015-11-17 16:40:17 · 1216 阅读 · 0 评论 -
STL 算法接口及用法说明
1. find 与 find_if2. transform 的两个版本 3. lexicographical_compare原创 2016-02-19 14:27:00 · 1768 阅读 · 0 评论 -
STL 中的容器们(三)
1. 二维vector的初始化2. set的添加动作3. 提供find方法的容器4. vector::resize() vs vector::reserve()原创 2015-11-19 15:29:04 · 1083 阅读 · 0 评论 -
STL::算法::常见算法
总述定位泛型编程(GP)走了一条与面向对象编程(OOP)完全不同的道路,各种容器类的设计与实现也没有走严格意义的继承、接口机制。在STL的设计与实现中,算法并非是容器类的成员函数,而是一种搭配迭代器(架起沟通算法和容器类的桥梁)使用的全局函数。这样做的一个重要优势在于:所有算法只需实现一份(而不是在每一个容器类的内部都实现一份),就可以对所有容器运作,不必为每一个容器类量身定制。因为算法本身也是模板原创 2015-11-11 21:11:26 · 1346 阅读 · 0 评论 -
仿函数(functors/function objects)原理及使用
仿函数(functors,或名 function objects,函数对象),是 STL 六大组件(Components)的重要一环,如下图: 仿函数的应用场景主要在:作为算法组件中的相关函数接口的参数。在STL的历史上,仿函数(functors)是早期的命名,C++ 标准定案后使用函数对象(function objects)的叫法。就实现意义而言,“函数对象”:一种具有函数性质的对象(本质为原创 2016-02-19 08:53:37 · 2740 阅读 · 0 评论 -
标准模板库(STL)之 map 列传 (二)
标准模板库(STL)之 map 列传 map 容器的遍历修改 key or value实用的成员函数下标 vs atmap 容器的遍历使用 range-based for 循环访问 map 元素(C++11之后方支持)std::map<std::string, float> coll;...for (auto elem&: coll) std::cout << "key: "原创 2016-02-29 21:21:52 · 1147 阅读 · 0 评论 -
深入理解 STL
私有成员变量 vs 容器 数据是精髓和灵魂。私有成员变量之于一个类,正如容器之于 STL;私有成员变量之于一个类一般而言,类是对私有成员变量的封装与抽象,类内的私有成员函数为公用成员函数服务,公有成员函数围绕私有成员变量展开(如果不操作私有成员变量),是没必要把公有成员函数放在类内实现的。容器之于 STL侯捷老师将STL,划分为六大组件,容器(containers):自不待言,用来存放数据原创 2016-03-16 16:10:53 · 1241 阅读 · 0 评论 -
标准模板库 STL—— set 列传
1. 创建 set 容器对象时,指定排序规则(sorting criterion)原创 2016-02-19 10:55:37 · 1091 阅读 · 0 评论 -
utilities——C++常用仿函数
0. unary_function/binary_function1. greater<>/less<>2. 排序规则(sorting criterion)原创 2016-02-19 09:21:28 · 1822 阅读 · 0 评论 -
STL 中的容器们
1. queue stack2. deque vs vector原创 2016-02-19 10:28:21 · 992 阅读 · 0 评论 -
STL::算法::常见算法(二)
1. remove_copy/remove 及其泛化版 remove_copy_if/remove_if这两组函数提供的实现删除序列中的相关元素的思路,对我们实现自己的算法是有帮助的。原创 2016-02-21 22:40:33 · 1082 阅读 · 0 评论 -
源码之前,了无秘密(一)——iterator adapter
阅读 iterator adapter 源码,我们将获悉以下结论背后的道理:(1)如何鬼斧神工,将赋值变为插入,将前进变为后退了,绑定到任意装置上(2)为什么 vector 不支持 front_inserter一、赋值变插入赋值变插入的操作主要包括:(1)专司尾端插入的 back_insert_iterator,back_insert_iterator 其实是模板类,通过 back_inse原创 2016-03-20 00:54:15 · 1386 阅读 · 0 评论 -
STL 算法/容器——总论
不同算法所需的迭代器类型原创 2016-02-29 20:03:33 · 1060 阅读 · 0 评论