C++STL
C++STL
~青萍之末~
弱者总有弱者的理由
展开
-
STL详解及常见面试题
1、各种容器的特点和适用情况2、各种容器的底层机制(1)vector vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。(2)list 以结点为...原创 2018-06-17 10:41:05 · 30373 阅读 · 8 评论 -
Effective STL之在程序中使用STL
一、用纯函数做判断式 先介绍两个概念–“纯函数”与“判别式”: 纯函数是返回值只依赖于参数的函数。如果f是一个纯函数,x和y是对象,f(x, y)的返回值仅当x或y的值改变的时候才会改变。 判别式是返回bool(或者其他可以隐式转化为bool的东西)。判别式在STL中广泛使用。标准关联容器的比较函数是判断式,判断式函数常常作为参数传递给算法,比如find_if和多种排序算法。 判别式类是仿函原创 2018-04-23 17:42:18 · 329 阅读 · 0 评论 -
Effective STL之算法
一、确保目标区间足够大 STL容器在被添加时(通过insert、push_front、push_back等)自动扩展它们自己来容纳新对象。这是一个很不错的特性,有些程序员因为这个信仰而被麻痹,认为他们不必担心要为容器中的对象腾出空间,因为容器自己可以照顾好这些。但是当程序员想向容器中插入对象但并没有告诉STL他们所想的时,问题出现了。这里有一个常见例子:int transmogrify(int x原创 2018-04-22 19:35:10 · 382 阅读 · 0 评论 -
Effective STL之迭代器
标准STL容器提供了四种不同的迭代器:iterator、const_iterator、reverse_iterator和const_reverse_iterator。一、尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator 每个标准容器类都提供四种迭代器类型。对于container而言,iterator的作用相当于T原创 2018-04-19 20:16:05 · 239 阅读 · 0 评论 -
Effective STL之关联容器
一、理解相等和等价的区别 在STL中有很多函数,它们需要确定两个值是否相同,但是这些函数判断的方式有多不同。例如find函数和set::insert。find对“相同”定义为相等,是以operator==为基础的;set::insert对“相同”的定义是等价,是以operator<为基础的。如果要有效地使用STL,必须理解“相等”和“等价”的区别。 相等:如果表达式X==Y为真,则X和Y相等,否原创 2018-04-19 19:36:00 · 243 阅读 · 0 评论 -
Effective STL之vector和string
一、vector和string优于动态分配的数组 当你决定用new动态分配内存时,这意味着: 确保有delete操作,否则会导致内存泄漏 确保正确使用了delete形式,new-delete,new[]—delete[]。必须确保只delete了一次。 vector和string避免了上述情况,因为它们自己管理内存。当元素被加入到容器中时,它们的内存会增长;当vector或...原创 2018-04-18 17:35:28 · 316 阅读 · 0 评论 -
Effective STL之容器
一、慎重选择容器类型1、容器分类标准STL序列容器:vector,string,deque,list;标准STL关联容器:set,multiset,map,multimap;非标准关联容器(基于散列表):hash_set,hash_multiset,hash_map,hash_multimap;几种标准的非STL容器:数组、bitset、stack、queue、priority_queue;原创 2018-04-15 21:26:40 · 261 阅读 · 0 评论 -
map和pair
一、pair简介1、pair的类型:pair是一种模版类型。每个pair 可以存储两个值。这两种值的类型没有限制,也可以将自己写的类放进去。2、pair 应用:如果一个函数有两个返回值的话,如果是相同类型,就可以用数组返回,如果是不同类型,两个属性的话,就可以用pair 进行操作,有多个属性的时候 ,可以使用tuple。3、生成方法2种:pair<int ,int >p (5,6);pair<int原创 2018-03-07 19:55:14 · 21441 阅读 · 4 评论 -
STL算法总结
一、概览: A:beg和end是表示元素范围的迭代器。 B:beg2是表示第二个输入序列开始位置的迭代器。end2表示第二个序列的末尾位置,若没有end2,则假定beg2表示的序列至少与beg和end表示的序列一样大。 C:dest是表示目的序列的迭代器,对于给定输入序列,算法需要生成多少元素,目的序列必须能保存同样多的元素。 D:unaryPred和bin转载 2017-10-13 19:47:36 · 486 阅读 · 0 评论 -
closure(闭包)、仿函数、std::function、bind、lambda
一、闭包 closure(闭包)有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。 一个函数, 带上了一个状态, 就变成了闭包了. 什么叫 "带上状态" 呢? 意思是这个闭包有属于自己的变量, 这些个变量的值是创建闭包的时候设置的, 并在调用闭包的时候, 可以访问这些变量。 函数是代码, 状态是一转载 2017-10-13 18:37:43 · 2892 阅读 · 0 评论 -
STL总结
STL(Standard Template Library)里有很多组成部分,但是主要有三个,容器、迭代器和算法 容器用来管理某个特定对象的集合。每一种容器都有自己的优点和缺点,在项目中根据不同的需求,使用不同的容器。容器可以是数组、链表或者类字典。 迭代器用于遍历对象集合的元素。这些集合可以是容器或容器的子集。每一个容器类都提供了它自己的迭代器类型。 算法原创 2017-10-13 16:37:27 · 531 阅读 · 0 评论 -
关联容器(map、set、multimap、multiset、pair、unordered_map)
一、使用关联容器 关联容器支持高效的关键字查找和访问。两个主要的关联容器类型是map和set。map中的元素是一些关键字---值(key---value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字;set支持高效的关键字查询操作---检查一个关键字是否在set中。 multimap允许多个元素具有相同的关键字。 pair类型原创 2017-10-11 20:07:37 · 452 阅读 · 0 评论 -
泛型算法(find、count、sort、fill、unique、copy、lambda、迭代器)
一、概述 泛型算法可以用于不同类型的元素和多种容器类型,大多数算法定义在头文件algorithm中,还有一些数值泛型算法定义在头文件numeric中。 迭代器让算法不依赖于容器,但是算法依赖于元素类型的操作(算法永远不会执行容器的操作)。1、find和count:#include #include #include #include #include us原创 2017-10-09 20:45:42 · 1963 阅读 · 0 评论 -
顺序容器(vector、deque、list、forward_list、array 、string)
一、顺序容器概述 顺序容器提供了控制元素存储和访问顺序的能力,顺序与元素加入容器时的位置相对应。1、常见的顺序容器类型:vector:可变大小的数组。支持快速随机访问,在尾部之外的位置插入或者删除元素可能很慢。deque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。 list :双向链表。只支持双向顺序访问。在list任何位置插入/删除速度很快。原创 2017-10-09 18:36:49 · 921 阅读 · 0 评论