
STL之道
文章平均质量分 81
瞭望天空
人生苦短以苦为乐不求最好只求更好
展开
-
泛型算法 —— 独立于容器的算法
一:泛型算法 简介(1)所有标准库容器都有支持递增运算符、递减运算符(++、--、== !=)这四种运算符的迭代器;string 和 vector 提供了更多的运算符(> >= (2)标准库并未给每一个容器都定义成员函数来实现排序、查找、复制等操作,而是定义了一组泛型算法(generic algorithm)。(3)迭代器令算法不依赖于容器(迭代器的知识请看 : 初始迭代器 ite原创 2014-11-26 20:46:32 · 1627 阅读 · 1 评论 -
队列(queue) 之 c++模板实现(友元函数和运算符重载)
一:起因(0)拿出自己年初实现的queue队列,第一次用c++类实现queue,在和如今实现的其他复杂的STL对比,心情无比复杂;注释:看到听到当年自己的所写所想,正的是一种享受 —— 倾听自己的幼稚也是一种美。(1)闲话少说了,我自己现在回答自己的 三 (5) 中提到的问题,函数的返回值是用bool型还是void型??其实函数返回值是bool 还是 void是原创 2014-11-22 20:47:47 · 2052 阅读 · 4 评论 -
浅析STL 谓词 + 仿函数 + 函数指针(c)
一:起因(0)提到C++ STL,首先被人想到的是它的三大组件:Containers(容器), Iterators(迭代器), Algorithms(算法)。容器为用户提供了常用的数据结构(如,vector,list,deque,stack,map,multimap,set,multiset,外加string),算法大多是独立于容器的常用的基本算法(一般在algorithm头文件中,其中sor原创 2015-01-30 20:57:21 · 6619 阅读 · 0 评论 -
c++ string 之 find_first of 实现(更改篇)
一:实现之前先说一所find_first_of姊妹函数(1)find_first_of(string &str, size_type index = 0): 查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index正向开始,如果没找到就返回string::npos(2) find_first_not_of(cstring &str, size_typ原创 2014-11-08 21:53:57 · 6232 阅读 · 3 评论 -
C++map类型 之 简介
一:map的前世今生(1)从关联容器与顺序容器说起,关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素(vector,queue,stack,list等)。关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个基本的关联容器类型是 map 和 set。 其中map 的元素以键-值(key-value)原创 2014-11-19 17:03:46 · 4156 阅读 · 2 评论 -
初识迭代器 C++ Iterator
一:初识迭代器(Iterator类) 简写为 iter(1)由来,我们知道string类 vector类的对象,可以通过下标运算来访问元素;还有另外一种更通用的机制 -- 迭代器。不管你是用到 vector 还是list 或 map类你总离不开迭代器的。(2)所有标准库容器都可以使用迭代器,但是其中只有几种容器才同时支持下标运算符。(string不属于容器类型,但是基本操作与容器类似)原创 2014-11-26 15:00:19 · 2609 阅读 · 1 评论 -
堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)
/* 学习心得: 1、 此栈用链表实现,与上面的用数组实现不一样;用到了模板类Stack<DT> 2、 此类用到了复制构造函数 Stack(const Stack<DT> &original),运算符重载函数 Stack<DT>& operator = (const Stack<DT> &original) 3、 初始化的默认构造方式Stack():top(NULL) {},记住类中声明的函数不可以有函数体的, 但是空函数体(只有{})是可以的原创 2014-10-10 09:55:16 · 1886 阅读 · 2 评论 -
STL 之 初识set multiset(map multimap)
一:起因(1):set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高,具体实现采用了红黑树的平衡二叉树的数据结构。set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。创建 multiset base; 删除:如果删除元素a,那么在定义的原创 2015-01-30 13:42:57 · 1950 阅读 · 5 评论 -
STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
一:起因(1)STL中关于二分查找的函数有三个:lower_bound 、upper_bound 、binary_search —— 这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数;(2)ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个原创 2014-11-20 22:30:40 · 9295 阅读 · 4 评论 -
c++中string类的源代码
一:回顾(1)c++中的string类是在面试中和笔试中经常考的题目;(2)c++中的string类和fstream类合起来是处理外部数据的利器;(3)string类经常用到find find_first_of find_first_not_of find_last_of find_last_not_of substr replace等,以及联合使用来达到java中的split和tri原创 2014-11-10 12:20:09 · 20950 阅读 · 6 评论 -
c++实现list类(第一次用类) —— new对象需delete
一:起因(1)拿出自己年初实现的list,第一次用c++类实现list或者说第一次写一个工程上用到的list类,在和如今实现的list对比,心情无比复杂;(2)说明了一点,我也曾经幼稚过,现在还比较幼稚,但我相信,只要坚持最初梦想的人,终究会走向成熟;(3)更加详细的比较全的list 请看 STL list类源代码实现 (4)再次感谢自己能坚持最初的梦,相信你也有一个原创 2014-11-22 10:37:52 · 4436 阅读 · 6 评论 -
哈希(hash) 之插入和查找(链地址法)
一:学些心得1 getHash函数的设计最牛的是Unix中处理字符串的ELFHash();当然也可以自己写一个比较简单的getHash函数关键在于去mod M的M值,使器均匀的分布(一般是不大于hash_size的某一个素数,接近于2的某次幂);但是有一点需要注意就是返回的hash值必须是正值。2 处理冲突的方法:链地址法是比较好的方法了(静态动态都可以的);二次哈希(一般是加key值)再原创 2014-11-25 14:13:11 · 5047 阅读 · 2 评论 -
c++fstream文件读写(与java的比较)
一:起因(1)之前处理文本数据时,各种清洗数据用的都是java的File,FileReader/FileWriter,BufferedReader/BufferedWriter等类,详见java读写文本文件(2)应用java的原因是java里面的map非常灵活,eclipse编译器更是给力,而且ctrl 可以追踪函数 等,详见java map的排序(3)应用java的另一个原因是jav原创 2014-11-21 17:01:05 · 2883 阅读 · 0 评论 -
c++ string 之 find_first_not_of 源代码
一:实现之前先说一所find_first_not_of姊妹函数()(1)find_first_of(string &str, size_type index = 0):(find_first_of的实现如下链接:find_first_of的源代码) 查找在字符串中第一个与str中的某个字符匹配的字符,返回它的位置。搜索从index正向开始,如果没找到就返回string::原创 2014-11-10 12:08:42 · 2661 阅读 · 1 评论 -
STL 之 list源代码自行实现(iterator)
一:起因(1)数据结构里面两种非常重要的存储结构,线性结构中的连续存储结构(代表vector数组)和非连续存储结构(代表list链表),他们两者被广泛的应用在各个领域,是最基本最基础的两种存储结构;(2)vector 已经简单的实现了,请看STL 之 vector的实现 之前还实现了STL的string类,请看 STL 之 string 的实现(3)之前的友元类只是停留在理原创 2014-11-17 20:24:25 · 5826 阅读 · 5 评论