
c/c++成长之路
文章平均质量分 77
瞭望天空
人生苦短以苦为乐不求最好只求更好
展开
-
redis 值 hiredis (c/c++)
0 前言: python 版的redis 直接pyredis接口(pip install 即可);redis server的安装(参照http://www.cnblogs.com/lpshou/p/3167396.html 不错的); 本次是c 引入hiredis第三方模块 ~ GitHub最新的https://github.com/redis/hiredis/tree/v0.13.3 直接解原创 2017-04-11 16:11:00 · 1303 阅读 · 0 评论 -
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++实现list类(第一次用类) —— new对象需delete
一:起因(1)拿出自己年初实现的list,第一次用c++类实现list或者说第一次写一个工程上用到的list类,在和如今实现的list对比,心情无比复杂;(2)说明了一点,我也曾经幼稚过,现在还比较幼稚,但我相信,只要坚持最初梦想的人,终究会走向成熟;(3)更加详细的比较全的list 请看 STL list类源代码实现 (4)再次感谢自己能坚持最初的梦,相信你也有一个原创 2014-11-22 10:37:52 · 4436 阅读 · 6 评论 -
初识迭代器 C++ Iterator
一:初识迭代器(Iterator类) 简写为 iter(1)由来,我们知道string类 vector类的对象,可以通过下标运算来访问元素;还有另外一种更通用的机制 -- 迭代器。不管你是用到 vector 还是list 或 map类你总离不开迭代器的。(2)所有标准库容器都可以使用迭代器,但是其中只有几种容器才同时支持下标运算符。(string不属于容器类型,但是基本操作与容器类似)原创 2014-11-26 15:00:19 · 2609 阅读 · 1 评论 -
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 评论 -
泛型算法 —— 独立于容器的算法
一:泛型算法 简介(1)所有标准库容器都有支持递增运算符、递减运算符(++、--、== !=)这四种运算符的迭代器;string 和 vector 提供了更多的运算符(> >= (2)标准库并未给每一个容器都定义成员函数来实现排序、查找、复制等操作,而是定义了一组泛型算法(generic algorithm)。(3)迭代器令算法不依赖于容器(迭代器的知识请看 : 初始迭代器 ite原创 2014-11-26 20:46:32 · 1627 阅读 · 1 评论 -
STL 之 初识set multiset(map multimap)
一:起因(1):set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高,具体实现采用了红黑树的平衡二叉树的数据结构。set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。创建 multiset base; 删除:如果删除元素a,那么在定义的原创 2015-01-30 13:42:57 · 1950 阅读 · 5 评论 -
堆(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 评论 -
大话 函数指针 和 枚举这对鸳鸯
一:起因(1)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是代码区)的首地址的指针,正如我们都知道,数组名就是指向数组第一个元素的常量指针,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。大话 回调函数 和 枚举(2)而回调函数就是C语言里面对函数指针的高级应用,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给原创 2015-01-10 21:36:06 · 1539 阅读 · 3 评论 -
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 评论 -
哈希(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类的源代码
一:回顾(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 语言里 类型转换那些事儿
一: 起因(1)最近接触了类型转换,例如有符号数转化为无符号数 ---- int 转化为 unsigned int类型,莫要想当然的转化;(2)弥补一下自己当初学习计算机组成原理时,原码、反码、补码就比较容易混淆的概念;(3)double类型的如何判断某一个参数是否为零,直接 == 0.0,,貌似可以 ---- 确实有时可以,但是有时却不可以,这是为什么?(4)知识补充:在int原创 2014-12-04 17:22:45 · 2008 阅读 · 0 评论 -
大话 回调函数 和 枚举
一:起因(1)接着上一篇博客 大话 函数指针 和 指针函数(2)对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用(3)回调函数可以实现代码具体实现 和 功能描述的分开,可以实现代码的重用性,特别是代码的可扩展性(4)要想实现函数与类型无关,就可以借助回调函数就可以达到这个目的,当然也可以通过泛型来实现相应的方法。(5)使得函数可以作为原创 2015-01-09 11:39:40 · 1799 阅读 · 2 评论 -
大话 函数指针 和 指针函数
一:起因(1)指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针,即我们常见的函数类型,且返回值是指针。(2)函数指针是指向函数的指针变量,即本质是一个指针变量,是一个指向函数(可能是代码区)的首地址的指针,正如我们都知道,数组名就是指向数组第一个元素的常量指针(详见《数组拾遗》)。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程原创 2015-01-07 09:19:47 · 2737 阅读 · 12 评论 -
剪枝算法(算法优化)
一:剪枝策略的寻找的方法1)微观方法:从问题本身出发,发现剪枝条件2)宏观方法:从整体出发,发现剪枝条件。3)注意提高效率,这是关键,最重要的。总之,剪枝策略,属于算法优化范畴;通常应用在DFS 和 BFS 搜索算法中;剪枝策略就是寻找过滤条件,提前减少不必要的搜索路径。二:剪枝算法(算法优化)1、简介 在搜索算法中优化中,剪枝,就是通过某种判断,避免一些原创 2015-03-05 10:40:56 · 66071 阅读 · 3 评论 -
浅析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 评论 -
Linux 静态链接库和动态连接库
下面给出实例代码演示Linux下面静态链接库和动态链接库的区别:静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,那么执行时,该函数将在当前程序的执行空间里留下多份拷贝,而且是一处调用就产生一份拷贝。原创 2016-02-15 13:49:23 · 3653 阅读 · 0 评论 -
图算法小结(prime与dijkstra对比) CodeBlocks再次安装
(0)Dijstra 最短路径和prim最小生成树算法,神似,只是在更新dist时的if条件不同;主要是这种prime 的计算两个集合间的最小值的思想非常重要。(1)某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。现在,已知起点和终点,请你计算出原创 2015-04-08 19:57:16 · 2460 阅读 · 0 评论 -
c++实现atoi()和itoa()函数(字符串和整数转化)
一:起因(1)字符串类型转化为整数型(Integer),还是字符串类型(String)转化为Double类型,这在java里面有非常好的内部函数,很easy的事情;(2)但是在c里面没有Integer Double等包装类,由char[]数组转化为整数型就变得不那么简单了,atoi() itoa()在widows下面有,但是网上说linux 下好像没有 itoa() 函数,用 sprin原创 2014-11-20 10:45:34 · 29131 阅读 · 17 评论 -
哈夫曼树 之 建树和编解码
/* * 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树,然后在主函数 main()中 * 自底向上开始(也就是从数组序号为零的结点开始)向上层层判断,若在 * 父结点左侧,则置码为 0,若在右侧,则置码为 1。最后输出生成的编码。 *--------------------------------------------------原创 2014-09-25 19:50:17 · 3830 阅读 · 6 评论 -
图算法小结(并查集)
一:起因(1)关于图的算法一般是比较复杂的,自己在这方面也是比较弱的,首先是图的存储问题 和 遍历问题:存储分为两种,邻接矩阵 和 临街表;遍历分为DFS 和 BFS两种,非常类似于二叉树的先跟遍历和层次遍历。(2)图在实际应用中是非常广泛的,这与万物归一,万物相连的理论是一致的,两个物体之间有着千丝万缕的联系,我们成这种联系建立的网络为图(带权图);联系的强弱为边的权重。(3)图原创 2015-04-08 15:57:23 · 1994 阅读 · 1 评论 -
DFS + 剪枝策略
一:简介(1)相信做过ACM的人,都很熟悉图和树的深度优先搜索;算法里面有蛮力法 —— 就是暴力搜索(不加任何剪枝的搜索);(2)蛮力搜搜需要优化时,就是需要不停的剪枝,提前减少不必要的搜索路径,提前发现判断的过滤条件;(3)剪枝的核心问题就是设计剪枝判断方法,哪些搜索路径应当舍弃,哪些搜索路径不能舍弃(保留);(4)高效的剪枝过滤条件需要从局部和全局来考虑问题,发现内在的规律。原创 2015-03-06 09:29:49 · 15028 阅读 · 1 评论 -
c++中的字符串转为int,字符串split(弱爆了)
(1)字符串类型转化为整数型(Integer),还是字符串类型(String)转化为Double类型,这在java里面有非常好的内部函数,很easy的事情;(2)但是在c里面没有Integer Double等包装类,由char[]数组转化为整数型就变得不那么简单了,atoi() itoa()在widows下面有,但是网上说linux 下好像没有 itoa() 函数,用 sprintf() 好了,但是本人测试了一下sprintf() sscanf()的效率很低。(3)所以自己手动实现了一下atoi()原创 2014-08-30 13:29:32 · 2185 阅读 · 0 评论 -
STL 之 list源代码自行实现(iterator)
一:起因(1)数据结构里面两种非常重要的存储结构,线性结构中的连续存储结构(代表vector数组)和非连续存储结构(代表list链表),他们两者被广泛的应用在各个领域,是最基本最基础的两种存储结构;(2)vector 已经简单的实现了,请看STL 之 vector的实现 之前还实现了STL的string类,请看 STL 之 string 的实现(3)之前的友元类只是停留在理原创 2014-11-17 20:24:25 · 5826 阅读 · 5 评论 -
队列(queue) 之 c++模板实现(友元函数和运算符重载)
一:起因(0)拿出自己年初实现的queue队列,第一次用c++类实现queue,在和如今实现的其他复杂的STL对比,心情无比复杂;注释:看到听到当年自己的所写所想,正的是一种享受 —— 倾听自己的幼稚也是一种美。(1)闲话少说了,我自己现在回答自己的 三 (5) 中提到的问题,函数的返回值是用bool型还是void型??其实函数返回值是bool 还是 void是原创 2014-11-22 20:47:47 · 2052 阅读 · 4 评论 -
c++中的悬浮指针和野指针 二级指针
c++中的悬浮指针:声明了但没有被付值的指针,它指向内存中的任意一个空间。避免悬浮指针的一个方法是开始就付值为NULL “野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是原创 2014-10-06 20:28:18 · 4528 阅读 · 3 评论 -
大话桶排序 基数排序和计数排序
一:计数排序(1)当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排原创 2015-03-29 15:22:48 · 2343 阅读 · 1 评论 -
记忆化搜索(搜索+dp思想)
一:简介(1)记忆化搜索 即 搜索+动态规划数组记录上一层计算结果,避免过多的重复计算算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存;一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解原创 2015-03-08 20:38:16 · 10006 阅读 · 3 评论 -
c++ fstream + string 处理大数据(与c 的fread)
一:起因(1)之前处理文本数据时,各种清洗数据用的都是java的File,FileReader/FileWriter,BufferedReader/BufferedWriter等类,详见java读写文件(2)应用java的原因是java里面的map非常灵活,eclipse编译器更是给力,而且ctrl 可以追踪函数 等,详见java map的排序(3)应用java的另一个原因是java里原创 2014-11-30 11:27:42 · 9958 阅读 · 10 评论 -
回溯算法 和 贪心算法(全排列)
一:简介(1)回溯法 又称试探法回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法;基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。适用场景:当遇到某一类问题时,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分原创 2015-03-08 15:29:05 · 6965 阅读 · 2 评论 -
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 评论 -
各种排序算法的效率比较
(1)本文包括冒泡算法、快排算法、插入排序算法等;通过随机数进行比较他们之前的效率;(2)自己手动实现的简单的算法 冒泡和快排与系统自带的算法进行了比较,由于系统自带是面向容器的,所以总体上不如自己简单实现的效率高,但是基本上在一个数量级上;(3)第一次这样纵向的比较自己手动写的代码,还是有点小激动的,不足之处,请各位指正哦。。(4)我也幼稚我的哦。。。原创 2014-08-30 13:29:13 · 2650 阅读 · 0 评论 -
c++内部类和外部类(java)
(1)简介:内部类其实就是一种在类声明里面定义的一种局部数据类型。(非常类似于struct Node声明的),这和java的还有存在区别的。---- 内部类的声明有public和private之分如果声明为public,那么外面也可以用它来定义变量,比如Outer::Inner var如果声明为private,那么外面不能用来定义变量,那么Outer::Inner var将会导致编原创 2014-11-23 12:15:04 · 1902 阅读 · 0 评论 -
关于C++ const 的全面总结(个人感觉一般般)
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参转载 2014-09-26 21:41:22 · 796 阅读 · 0 评论 -
哈希(hash) 之 hash的插入和查找(链地址法)
学些心得:1 getHash函数的设计最牛的是Unix中处理字符串的ELFHash();当然也可以自己写一个比较简单的getHash函数关键在于去mod M的M值,使器均匀的分布(一般是不大于hash_size的某一个素数,接近于2的某次幂);但是有一点需要注意就是返回的hash值必须是正值。2 处理冲突的方法:链地址法是比较好的方法了(静态动态都可以的);二次哈希(一般是加key值)再探测;或者加1再探测3 插入和查找以及删除的第一步都是一样的,getHash(),时候存在……4 对于链表发,插入原创 2014-09-02 21:33:11 · 2300 阅读 · 0 评论 -
哈希(hash) 之 开放地址法(poj)
#include #includeusing namespace std;const int size=20345677;const int M=1000000000;const int key=1357;typedef struct Hash{ int val; int cp;}Hash;Hash hash[size];// 线性探测再散列,为啥全部加M呢,因原创 2014-09-04 09:22:08 · 2026 阅读 · 0 评论 -
c++文件操作
#include#include#includeint N = 552;int main(){ FILE *in,*out; char a[14][12]; char ch[12]; int i,j,p;//p保存读文件的位置,以备后用 //打开所读文件 if( ( in=fopen("E:\\201312 learning\\GPS\\gpshis100922\\gpsh原创 2014-08-30 13:33:41 · 983 阅读 · 0 评论 -
动态规划 之 最长上升序列
/*#include using namespace std;const int m_size = 40010;int arr[m_size],opt[m_size];void dp(const int &n){ int i,j,max; opt[1] = 1; for(i=2;i<=n;i++) { max = 0; f原创 2014-08-30 11:51:03 · 858 阅读 · 0 评论