摘要: RAII被认为是c++资源管理的最佳范式,但是c++98中用RAII必须为要管理的资源写一个类,这样一来RAII的使用就有些繁琐了。C++11有了lambda和function后,我们就可以编写泛化的RAII,实现ScopeGuard,优雅地解决这个问题。本文主要参考刘未鹏的博客。 主要代码如下 为 阅读全文
posted @ 2016-02-27 13:07 你好呵呵 阅读(1549) 评论(0) 推荐(3) 编辑
摘要: 正则表达式基本每个程序员都会用到,实现正则表达式引擎却似乎是一个很难的任务。实际上,掌握《编译原理》前端的词法分析部分知识就能够实现一个简单的正则表达式引擎。这里推荐一下网易云课堂的课程。http://mooc.study.163.com/course/USTC-1000002001?tid=100 阅读全文
posted @ 2016-02-24 11:07 你好呵呵 阅读(12337) 评论(4) 推荐(3) 编辑
摘要: 异常安全有两个目标: 不泄露任何资源。这个通过RAII可以做到。 不破坏数据结构。这是下文要讨论的事情 异常安全有三个级别: 基本安全:异常发生后对象和数据结构还有合法状态。实现简单,应该作为最低要求。 很安全:抛出异常后程序状态不变。即要有“原子性”,若成功则完全成功,失败则保持原状。本文的cop 阅读全文
posted @ 2016-02-20 20:40 你好呵呵 阅读(1296) 评论(0) 推荐(0) 编辑
摘要: 最近在仿写stl,发现stl源码中将模板的声明与定义写在一起实在很不优雅。自己尝试用“传统”方法,及在.h文件里声明,在.cpp文件里定义,然后在main函数里包含.h头文件,这样会报链接错误。这是因为函数模板要被实例化后才能成为真正的函数,在使用函数模板的源文件中包含函数模板的头文件,如果该头文件 阅读全文
posted @ 2016-02-19 10:43 你好呵呵 阅读(22863) 评论(4) 推荐(4) 编辑
摘要: 在仿写stl的过程中,被一处内存错误卡了很久。当内存池需要多次malloc时会出现堆损坏的错误,初步判断是数组越界,但总是检查不出来。一开始用Dr.Memory检查不出来,就试了一下devpartner。官网链接 http://www.borland.com/zh-CN/Products/Softw 阅读全文
posted @ 2016-02-16 21:23 你好呵呵 阅读(1505) 评论(0) 推荐(0) 编辑
摘要: n皇后问题是应用回溯法的经典问题。任一行、列、对角线不能有两皇后并存,因此在判断是否合法时,可以将某一行是否有皇后、某一列是否有皇后分别用数组存起来。注意到,对于往左下右上的对角线,每个点的行号(i)和列号(j)的和相等且与别的对角线不同,因此可用数组将此对角线是否有皇后,即i+j是否为1记录下来, 阅读全文
posted @ 2016-02-14 23:48 你好呵呵 阅读(565) 评论(0) 推荐(0) 编辑
摘要: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n = 3, a solution set is: " 阅读全文
posted @ 2016-02-13 22:08 你好呵呵 阅读(330) 评论(0) 推荐(0) 编辑
摘要: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the hist 阅读全文
posted @ 2016-02-06 00:08 你好呵呵 阅读(367) 评论(0) 推荐(0) 编辑
摘要: Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.) You have 阅读全文
posted @ 2016-02-04 20:18 你好呵呵 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 本来以为没必要用栈,代码如下: class Solution { public: int longestValidParentheses(string s) { int stack = 0; int length=0,max=0; for(int i=0;i<s.length();i++) { if 阅读全文
posted @ 2016-02-03 23:31 你好呵呵 阅读(270) 评论(0) 推荐(0) 编辑