stl
huangyimo
这个作者很懒,什么都没留下…
展开
-
实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了。是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智的。写到这里,应该明确了size和转载 2016-08-18 11:43:23 · 539 阅读 · 0 评论 -
【STL】标准库中count与count_if函数说明与例子
count_if函数原型如下:template<class _InIt, class _Pr> inline typename iterator_traits<_InIt>::difference_type count_if(_InIt _First, _InIt _Last, _Pr _Pred);前两个参数是iterator(迭代器),表示查找半...转载 2018-05-17 11:00:27 · 491 阅读 · 0 评论 -
stl.find_if用法总结
有时我们要在map、vector容器中查找符合条件的记录,map提供一个find的成员函数,但也仅限于查找关键字满足条件的记录,不支持值域的比较。如果我们要在值域中查找记录,该函数就无能无力了。而vector甚至连这样的成员函数都没有提供。所以一般情况下进行值域的查找,要么自己遍历数据,要么求助于STL的find_if函数。前种方法我们这里就不赘述了,只讲find_if函数。1 -- find_i...转载 2018-05-17 10:43:59 · 700 阅读 · 0 评论 -
C++ traits编程技法之__type_traits
//以下是铺垫,__type_trivial的作用在后面,下面是一些概念性介绍。 __type_trivial 双底线前缀,表示是SGI STL以外的东西,不在STL标准范围之内。__type_trivial负责萃取型别(Type)的特性,究竟是什么特性呢? 注:trivial是英文“无意义的、不重要”的意思。 答曰:这个型别是否具备non-trivialdefa...转载 2018-03-02 20:27:32 · 827 阅读 · 0 评论 -
STL中的Traits编程技法
最近在看读《STL源码剖析》,看到Traits编程技法这节时,不禁感慨STL源码作者的创新能力。那么什么是Traits编程技法呢?且听我娓娓道来: 我们知道容器的许多操作都是通过迭代器展开的。其中容器类似于数组,迭代器类似于指针。我们用数组来写个例子:1 int arr[5] = {1,2,3,4,5};2 int *p;3 p = &arr[2]; 假设,我将转载 2018-01-29 17:04:51 · 458 阅读 · 0 评论 -
《STL源码剖析》学习之traits编程
侯捷老师在《STL源码剖析》中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘。如此一说,其重要性就不言而喻了。 之前已经介绍过迭代器,知道了不同的数据结构都有自己专属的迭代器,不同的迭代器也有不同的特性,由于算法的接口是统一的,通过迭代器的不同属性,算法自动选择正确的执行流程,在完全任务的同时,也尽可能提高算法的执行效率。那算法如何获知转载 2018-01-29 17:02:56 · 189 阅读 · 0 评论 -
SGI STL中内存池的实现
最近这两天研究了一下SGI STL中的内存池, 网上对于这一块的讲解很多, 但是要么讲的不完整, 要么讲的不够简单(至少对于我这样的初学者来讲是这样的...), 所以接下来我将把我对于对于SGI STL的理解写下来, 方便以后查阅同时也希望能够对像我一样刚刚接触C++的初学者提供一些帮助吧. 首先我们需要明确, 内存池的目的到底是什么? 首先你要知道的是, 我们每次使用new T转载 2018-01-01 23:08:59 · 435 阅读 · 0 评论 -
STL学习——STL中的内存池管理技术
一、STL中的内存管理当我们new一个对象时,实际做了两件事情:(1)使用malloc申请了一块内存。(2)执行构造函数。在SGI中,这两步独立出了两个函数:allocate申请内存,construct调用构造函数。这两个函数分别在和中。二、第一级配置器第一级配置器以malloc(),free(),realloc()等C函数执行实际的内存配置、释放、重新配置等操作,并且能在内存转载 2018-01-01 22:19:12 · 1098 阅读 · 0 评论 -
SGI STL空间配置器详解(一)-第一级空间配置器
一、SGI STL配置器简介SGI STL的配置器与众不同,它与标准规范不同。如果要在程序中明确使用SGI配置器,那么应该这样写:[cpp] view plain copyvectorint,std::alloc> iv; 他的名字是alloc,而且不接受任何参数。标准配置器的名字是allocator,而且可以接转载 2017-11-16 11:18:56 · 300 阅读 · 0 评论 -
STL源码剖析——STL算法之find查找算法
前言 由于在前文的《STL算法剖析》中,源码剖析非常多,不方便学习,也不方便以后复习,这里把这些算法进行归类,对他们单独的源码剖析进行讲解。本文介绍的STL算法中的find、search查找算法。在STL源码中有关算法的函数大部分在本文介绍,包含findand find_if、adjacent_find、search、search_n、lower_bound、upper_boun转载 2017-11-21 10:19:36 · 529 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查转载 2017-04-21 09:20:54 · 392 阅读 · 0 评论 -
C++三种容器:list、vector和deque的区别
在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担。还有一个就是容器,你会发现要是自己写一个链表、队列,或者是数组的时候,既要花时间还要操心怎么去维护,里面的指针啊,内存够不够用啊,长度问题,有没有可能溢出啊等等一系列的问题等着我们去解决,还是比较头疼的。所以容器的出现解决了这一个问题,它将这些数据结构都封装成了一个类,只需要加上头文件,我们转载 2016-12-27 14:41:12 · 374 阅读 · 0 评论 -
内存链表union类型节省内存
我在阅读《STL源码剖析》中看到关于内存组织成空闲链表的结构:union obj{ union obj* next; char client_data[1];};使用union主要是为了节省空间,当我们以一个指针得到该块内存时,可以完全使用该块内存。假如我们用result*得到该块内存后,请问我们应该如何根据client_data来存储数据呢? clie...转载 2018-07-18 21:38:20 · 600 阅读 · 0 评论