
C++ STL 应用与实现
文章平均质量分 90
分享关于C++ STL的应用方法以及STL的实现方法。
elloop
el
展开
-
【C++ STL应用与实现】6: 如何使用std::list
list是stl对链表数据结构的一种支持,其通常被实现为双向链表。本文介绍了list的基本用法以及在使用list时需要注意的一些问题。原创 2017-01-31 19:11:14 · 1122 阅读 · 0 评论 -
【C++ STL应用与实现】2: 如何使用std::vector
本文介绍vector容器。vector是STL容器中最为常用的一个,它是序列式容器的代表,是对动态数组的抽象封装。原创 2017-01-29 23:35:04 · 1777 阅读 · 0 评论 -
【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法
本文介绍如何使用STL里的heap(堆)算法。第一次接触heap这种数据结构是在大学的数据结构教材上,它是一棵完全二叉树。在STL中,heap是算法的形式提供给我们使用的。包括下面几个函数:make_heap: 根据指定的迭代器区间以及一个可选的比较函数,来创建一个heappush_heap: 把指定区间的最后一个元素插入到heap中pop_heap: 弹出heap顶元素, 将其放置于区间末尾原创 2016-11-29 23:41:09 · 5159 阅读 · 2 评论 -
【C++ STL应用与实现】目录
这篇文章是《STL应用与实现》系列的目录, 也是这系列文章的写作计划。STL的总结主要分成四大块:容器、迭代器、函数对象和算法。每个大块细分成的每个叶子节点就对应着一篇文章,文章标题在目录里以超链接的形式展现,作为一个索引。已经完成的文章,我会在后面加上【完成】标识。跳转不过去的就是未完成的文章,作为写作计划。原创 2015-12-19 08:07:18 · 16426 阅读 · 3 评论 -
【C++ STL应用与实现】1: STL概览和分类
本文从整体上对STL的内容和功能做了一个概览,并根据其组成部分功能的不同对STL的组件进行分类。在后续的文章中会对每个分类中的组件进行展开说明。原创 2015-12-15 22:32:14 · 8617 阅读 · 0 评论 -
【C++ STL应用与实现】56: 使用std::unique删除重复元素
核心是应用中的unique函数, 它能删除连续序列的副本(Remove consecutive duplicates in range).原型如下:template ForwardIterator unique ( ForwardIterator first, ForwardIterator last );template ForwardIterator uniqu原创 2012-06-26 22:59:14 · 12563 阅读 · 0 评论 -
【C++ STL应用与实现】22: 函数组合之1:如何使用std::bind (since C++11)
本文总结了std::bind这个模板函数的用法,给出了std::bind绑定普通函数(函数指针)、lambda表达式、成员函数、成员变量、模板函数、嵌套std::bind等的语法细节及注意的问题。原创 2015-12-16 07:31:05 · 16305 阅读 · 3 评论 -
【C++ STL应用与实现】0: 感恩STL——STL, ACM和年轻的我们
本文是一篇洗脑文,鼓吹STL的好处, 回忆作者第一次认识STL,并给出STL的学习路线。原创 2015-12-17 13:50:39 · 10774 阅读 · 0 评论 -
【C++ STL应用与实现】86: 如何使用std::accumulate
本文总结了STL算法中,数值类算法(numeric algorithm)里的第一个算法: std::accumulate的使用, 及注意事项原创 2015-12-18 09:45:37 · 19765 阅读 · 2 评论 -
【C++ STL应用与实现】23: 如何使用std::mem_fn (since C++11)
本文总结了STL中函数适配器:`mem_fn`系列函数的用法,它们是:`mem_fun (c++98)`, `mem_fun_ref (c++98)`, `mem_fn (c++11)`. 文中给出了它们各自的使用范围及代码示例,提到了mem_fn的使用限制,使用bind来解决这个限制。原创 2015-12-21 23:48:34 · 20678 阅读 · 0 评论 -
【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)
本文总结了STL算法中for_each, for_each算法很常用,以致于C++11定义了一个新的语法: `range based for loop`, 也就是基于范围的for循环,直接在语法层面把for_each的功能给实现了。本文给出一些使用`for_each`和rang-based for loops的用法,并说明for loops的实现原理和使用注意事项。原创 2015-12-23 00:25:23 · 15129 阅读 · 0 评论 -
【C++ STL应用与实现】5: 如何使用std::array (since C++11)
本文总结了STL中的序列式容器array的用法及注意事项。array的出现代表着C++的代码更进一步“现代化”,就像std::string的出现代替了c风格字符串并且能和STL配合工作一样,array的出现则将取代语言内置的数组以及c风格的数组字符串,它提供了data()接口,使得能够获得内部数组的首地址,它提供了size(), 能够得其固定的长度,使得C++的数组也可以像Java等语言那样知道自己的length;它原创 2015-12-24 00:52:44 · 12551 阅读 · 2 评论 -
【C++ STL应用与实现】64: 如何使用shuffle和random_shuffle : 洗牌 (since C++11)
本文介绍了STL中的变序类算法(mutating algorithm)里面的洗牌算法:std::random_shuffle和std::shuffle.random_shuffle算法在C++11之前就已经存在,C++11之后由于右值引用的引入,它的使用范围变大了。shuffle算法则是从C++11之后才开始出现,可以与随机数和分布库一起使用。与本系列的其他文章一样,本文介绍该最新的使用方法,比如rand原创 2015-12-25 00:23:06 · 19385 阅读 · 0 评论 -
【C++ STL应用与实现】7: 如何使用std::forward_list 单链表 (since C++11)
本文介绍了STL中的序列式容器`std::forward_list`, 从它的名字就能推测出来,它是单向的,只能前进(forward). 确实如此,它其实就是对C语言风格的单链表的封装,仅提供有限的接口,相对于std::list(双向链表,并且定义很多接口)来说它节省了内存,同时又有比list更好的运行时性能;原创 2015-12-25 23:46:01 · 6120 阅读 · 0 评论 -
【C++ STL应用与实现】17: 如何使用迭代器辅助函数
本文介绍了STL中的迭代器辅助函数的用法及注意事项,这些迭代器辅助函数包括:advance, next (since C++11), prev (since C++11), distance, iter_swap.使用这些辅助函数需要包含头文件:#include <iterator>advance, next, prev, distance这四个辅助函数使得所有迭代器都拥有类似随机访问迭代器的特性,比如adv原创 2015-12-26 23:33:23 · 2326 阅读 · 0 评论 -
【C++ STL应用与实现】16: 迭代器综述
本文介绍了STL中的迭代器的概念和五种类别的迭代器:`Output iterator`, `Input iterator`, `Forward iterator`, `Bidirectional iterator`, `Random-access iterator`.迭代器是为了表示容器中某个元素位置这个概念而产生的,有一般到特殊("高级")可以把它分成五类,如下表所示:原创 2015-12-27 22:53:42 · 1486 阅读 · 0 评论 -
【C++ STL应用与实现】18: 如何使用迭代器适配器
本文介绍了STL中的迭代器适配器(iterator adapter)的概念及其使用方法示例。迭代器适配器可以和标准库中的算法配合使用,达到一些特殊的效果。迭代器适配器分为以下几类:- reverse iterator : 反向迭代器- insert iterator : 插入型迭代器- stream iterator : 流迭代器- move iterator : 移动型迭代器原创 2015-12-29 01:15:05 · 1717 阅读 · 0 评论 -
【C++ STL应用与实现】19: 迭代器特性-iterator traits
本文介绍了STL中的迭代器相关的类型和特性,它们用来定义和区分不同的迭代器类型。如iterator tag作为迭代器的“标签”用来区分迭代器的类型;iterator traits定义了所有类型的迭代器都应该有的公共信息。那标准库为什么提供这些东西呢?答案是我们可以根据这些信息来编写泛型代码,在泛型代码里根据iterator traits来判定迭代器的类型以做相应处理、可以自己定义迭代器实现自定义的迭代器操作。原创 2015-12-30 00:42:31 · 2545 阅读 · 1 评论 -
【C++ STL应用与实现】95: 如何使用Allocator
本文展示了如何使用Allocator,例子取自《STL源码剖析》里实现的一个简单的Allocator,从中可以看到Allocator最基本的用法。原创 2016-09-30 20:52:25 · 1641 阅读 · 0 评论