﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-λ-calculus-随笔分类-C++</title><link>http://www.cppblog.com/vczh/category/6885.html</link><description>【QQ：343056143（已满），504254078】【MSN：vczh@hotmail.com】【Email：vczh@163.com】</description><language>zh-cn</language><lastBuildDate>Sun, 29 Jun 2008 12:03:31 GMT</lastBuildDate><pubDate>Sun, 29 Jun 2008 12:03:31 GMT</pubDate><ttl>60</ttl><item><title>使用XPath轻松获得VC9.0工程文件包含的所有代码文件</title><link>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 28 Jun 2008 04:55:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/54871.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/28/54871.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/54871.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/54871.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     玩了几天空之轨迹 FC，终于快结束了。距离最后一门考试还有3天，于是把整个XPath的代码写完了。于是试用一下。<br><br>    现在展示一下我那个XPath的使用方法：<br>1     VL_List<VL_XMLNode* , true> Result;<br>2     VL_XPath XPath(L"//Files//File[contains(@RelativePath,\".cpp\") or contains(@RelativePath,\".h\")]");<br>3     XPath.Query(Doc.GetRootElement(),Result);    第一行声明一个XML节点列表，第二行构造一个XPath，第三行将XPath作用在一个XML文档的根节点上。这个XPath用于把VC++9.0的工程文件中包含的所有.h文件和.cpp文件提取出来。虽然Files里面包含若干Filter，每一个Filter包含一些Filter和File，不过输出结果Output.xml把所有的满足要求的File节点都找了出来。<br><br>   &nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/28/54871.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/54871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-28 12:55 <a href="http://www.cppblog.com/vczh/archive/2008/06/28/54871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XPath语法分析器完成！</title><link>http://www.cppblog.com/vczh/archive/2008/06/21/54230.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 21 Jun 2008 08:34:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/21/54230.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/54230.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/21/54230.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/54230.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/54230.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     花了2个小时终于把XPath的数据结构和语法分析做完了。这个XPath的语法完全按照MSDN所说的做，除了减少了2个跟DTD相关的函数和11个Microsoft扩展的"ms:"开头的函数以外，剩下的功能将一概支持。<br><br>    代码写完了之后，我打开MSDN找里面的几十条XPath Example进行测试，发现了一些Bug，然后修正。现在MSDN所列举的所有例子都通过了，接下来只有自己写Example进行测试了。因为MSDN的例子并没有覆盖所有等价类。<br><br>    下面是运行结果和测试程序的代码：<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/21/54230.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/54230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-21 16:34 <a href="http://www.cppblog.com/vczh/archive/2008/06/21/54230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标准XPath语法整理</title><link>http://www.cppblog.com/vczh/archive/2008/06/20/54140.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 20 Jun 2008 09:44:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/20/54140.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/54140.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/20/54140.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/54140.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/54140.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; 为了整理出可以实现的XPath，我把根DTD相关的两个内置函数去掉了，Microsoft扩展的11个函数也没有考虑进去。XPath是一门非图灵完备的、没有副作用的、弱类型以及很难看的语言，用于把一个XML的某个节点转换成一些节点。Context：上下文。指的是使用指定条件正在搜索的XML路径的节点。ContextList：被PREDICATE过滤的列表...&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/20/54140.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/54140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-20 17:44 <a href="http://www.cppblog.com/vczh/archive/2008/06/20/54140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做了一个XML解释器</title><link>http://www.cppblog.com/vczh/archive/2008/06/19/54051.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 19 Jun 2008 13:28:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/19/54051.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/54051.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/19/54051.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/54051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/54051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     为了纪念自己为了明天的XML考试复习了半天，特地根据MSDN描述的标准做了一个XML的解释器。接口类似DOM和SAX的混合体。<br>    目前什么都不支持，不过以后打算做完DTD和XPath。XSD和XSL就先算了。反正是写着玩的。把代码贴出来先。这个代码使用了自己开发的一套C++基础库。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/19/54051.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/54051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-19 21:28 <a href="http://www.cppblog.com/vczh/archive/2008/06/19/54051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做个投票，大家支持</title><link>http://www.cppblog.com/vczh/archive/2008/05/15/49904.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Thu, 15 May 2008 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/05/15/49904.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/49904.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/05/15/49904.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/49904.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/49904.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 因为最近观察到一些很奇怪的现象，因此在此提出调查。不知道是我不会用cppblog还是cppblog没这个功能，总之我没找到【投票】的工具，因此只好手写。<br><br>&nbsp;&nbsp;&nbsp; <strong>1：大家在学习数据结构的时候，实践的方法通过（<span style="COLOR: red">多选</span>）</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：做习题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：学习STL和Boost等<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C：尝试自己开发一套模板库<br><br>&nbsp;&nbsp;&nbsp; <strong>2：大家在学习编译原理的时候，实践的方法通过（<span style="COLOR: red">多选</span>）</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：做习题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：学习flex、yacc/bison和ANTLR等<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C：尝试自己开发过编译器（特别指字符串处理部分，指令部分不在本题目考虑范围内）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D：尝试自己开发与flex、yacc/bison或ANTLR等价的工具（不拘泥于形式）<br><br>&nbsp;&nbsp;&nbsp; <strong>3：如果上面的题目选择了C或者D，那么（<span style="COLOR: red">单选，自己独立开发程序而不是在团队中开发时</span>）</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：自己需要的时候使用自己的库<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：自己需要的时候使用别人的库<br><br>&nbsp;&nbsp;&nbsp; <strong>4：如果第一题选择了B，那么（<span style="COLOR: red">单选，自己独立开发程序而不是在团队中开发时</span>）<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A：选择编译器或IDE推荐的库（MFC或其他，跟STL或Boost有交集的库）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B：选择STL、Boost等<br><br>&nbsp;&nbsp;&nbsp; 注意：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本人不倾向于向别人建议上面的任何观点，仅作调查。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 勿人身攻击，欢迎评论。&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写出自己的答案的同时请写出自己开发的时候经常使用的操作系统和编译器等工具。
<img src ="http://www.cppblog.com/vczh/aggbug/49904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-05-15 11:14 <a href="http://www.cppblog.com/vczh/archive/2008/05/15/49904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>笔试</title><link>http://www.cppblog.com/vczh/archive/2008/05/13/49684.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 12 May 2008 18:59:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/05/13/49684.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天经营着世界最大的搜索业务的某公司在位于广州市海珠区珠江河畔的某著名大学开了一次招聘会，申请实习软件工程师的都要笔试。于是我也去写了，虽然我不是位于广州市海珠区珠江河畔的某著名大学的学生，反正人人都能去。<br><br>&nbsp;&nbsp;&nbsp; <strong>第一道题，把字符串中相连的重复字符处理成一个。例如aaabbcddcc处理成abcdc。</strong>因为寒假的时候才往Vczh Free Script 2.0中添加了一个Mark-Compact Collector，因此算法也就模仿了一下Mark-Compact Collector，也就是把所有该删掉的字符换成'\0'，依次读取并跟右边最近的非'\0'字符置换一直到完。<br><br>&nbsp;&nbsp;&nbsp; <strong>第二道题，已知数列中有1、2、3三种数字，并且可以两两置换。求最小置换次数的方法让数列递增。</strong><br><br>&nbsp;&nbsp;&nbsp; 我用了这样的方法：<br>&nbsp;&nbsp;&nbsp; &#183;找到并保存每一个位置中应该存放的数字，也就是一1、2、3的数目都跟数列相同的递增数列bi。<br>&nbsp;&nbsp;&nbsp; &#183;遍历ai，找到ai&#8800;bi的i并做如下处理：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;寻找aj使得j&gt;i且bi＝aj且bi&#8800;bj<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;在这些j中寻找k使得bk＝ai<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;如果k非空则让m&#8712;k，否则让m&#8712;j并让下一步的k的势最大<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#183;置换ai和am<br><br>&nbsp;&nbsp;&nbsp; 一个好像很和谐但是事实上不知道和谐不和谐的证明：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j&gt;i且bi＝aj且bi&#8800;bj这个条件是必定满足的。如果不满足，则很容易证明ai和bi中1、2、3的数目不完全相同。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k非空使得一次置换产生了两个正确的结果。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于每一次置换，如果让m1&#8712;j且{m1}&#8745;k为空，m2&#8712;k，则有<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择m1而不是m2有可能减少、保持或增大下一次置换中k的势；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择m2则下一次置换中k的势不变。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样的话，选择m1最好的结果就是让这次置换不影响全部的置换，最坏的结果是增加了置换的次数；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择m2则不会影响全部的置换。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此只需每一次都尽量选择m2中的值，对于k&#8745;j为空的情况，则计算所有j得到的下一步的k的势dj，选择最大的j即可。<br><br>&nbsp;&nbsp;&nbsp;<strong> 第三道题，华容道解谜器。</strong>只好弄了个宽度优先搜索。<br><br>&nbsp;&nbsp;&nbsp; 以上纯属YY。<br><br>&nbsp;&nbsp;&nbsp; P.S.<br>&nbsp;&nbsp;&nbsp; &#183;选择题里面有一道问ABCDEFGHIJ的全排列中满足A在B前面的数量有多少？答案：因为A和B是对称的，因此对于任意一个确定的A和B的位置的集合，A在B前的概率是0.5，因此答案为10!/2。<br><br>&nbsp;&nbsp;&nbsp; &#183;同时拥有操作系统、开发工具、数据库引擎、办公软件、游戏平台等多项业务的某著名软件公司的招聘活动我也参加了一次，结果发现经营着世界最大的搜索业务的某公司和同时拥有操作系统、开发工具、数据库引擎、办公软件、游戏平台等多项业务的某著名软件公司【好像】有一个特点。经营着世界最大的搜索业务的某公司喜欢出最优解题目，同时拥有操作系统、开发工具、数据库引擎、办公软件、游戏平台等多项业务的某著名软件公司喜欢出最高速题目。而且经营着世界最大的搜索业务的某公司很喜欢去在位于广州市海珠区珠江河畔的某著名大学，而同时拥有操作系统、开发工具、数据库引擎、办公软件、游戏平台等多项业务的某著名软件公司则很喜欢去位于广州市五山的某著名理工大学。 
<img src ="http://www.cppblog.com/vczh/aggbug/49684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-05-13 02:59 <a href="http://www.cppblog.com/vczh/archive/2008/05/13/49684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式——一点小插曲</title><link>http://www.cppblog.com/vczh/archive/2008/05/07/49158.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 07 May 2008 13:21:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/05/07/49158.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/49158.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/05/07/49158.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/49158.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/49158.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     有个同学近来一直在做一个魔兽世界战况分析（名字好像叫DeusCraft），说是很火。只是用C#觉得不是很爽，想移植到C++上面来。但是那个东西在分析的时候用了好多正则表达式，于是只好找了些正则表达式引擎来测。<br><br>    测试的文件一共有27万多行，首先通过一个检查时间的正则表达式。如果成功，则在接下来的20几条正则表达式中验证字符串命中哪一条，然后开始做剩余的工作。原先在C#上花了12秒分析，后来换了boost的正则表达式花费40秒，然后从MSR上找了一个号称比boost快4倍的正则表达式引擎，结果还是40秒（都是微软的，咋差距这么大……）。于是同学用他自己做的正则表达式引擎花了23秒（此数据不太记得），我用我以前那个东西花费108秒（-_-|||）。<br><br>    于是我们这几天就在优化正则表达式引擎，到了今天同学那个花费13秒，我那个12秒。Visual Studio 2008 Team System上有一个Performance Wizard，用于在程序执行的过程中统计各个函数所占用的时间，可以方便定位，看出效率瓶颈，非常好用。<br><b&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/05/07/49158.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/49158.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-05-07 21:21 <a href="http://www.cppblog.com/vczh/archive/2008/05/07/49158.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>寻路算法：模仿Tower Defense Flash做了一个小游戏</title><link>http://www.cppblog.com/vczh/archive/2008/04/30/48555.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 30 Apr 2008 13:29:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/04/30/48555.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/48555.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/04/30/48555.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/48555.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/48555.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     第一次用C#写游戏。在C#上写算法果然是一个挑战，时间复杂度太大的话造成的后果比C++明显好多，于是总是尽量把东西做成O(n)或者O(nlogn)。这次就在上面实现了一个寻路算法。<br><br>    这个寻路算法是这样的：在16×16的方格上有一些终点，东西在格子上只能上下左右行动。每一个格子需要记录到其中一个终点的最近的路的第一个方向（就像三层循环的寻路算法一样，最后给出矩阵的那个）。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/04/30/48555.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/48555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-04-30 21:29 <a href="http://www.cppblog.com/vczh/archive/2008/04/30/48555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天发现自己的array类太慢</title><link>http://www.cppblog.com/vczh/archive/2008/04/28/48321.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 28 Apr 2008 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/04/28/48321.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/48321.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/04/28/48321.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/48321.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/48321.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     Lazy Compile使用Syngram动态创建语法分析器的代码实在是太慢了，debug竟然需要8秒钟来处理91条比较长的文法。于是我打开了Visual Studio 2008的Performance Wizard查看运行时消耗的资源，结果发现竟然都消耗在自己那个array类的operator[]里面了。那一段代码是用来检查文法的左递归引用关系是否出现环的。结果就把用到的四个array全部换成bool*了，当时只是为了创建二维数组方便使用了array类。<br><br>    过后，debug的时间立刻降为2秒钟不到，于是我又打开Performance Wizard看了一次，这次消耗的瓶颈终于转移到一个合理的地方了。<br><br>    结果：array竟然比指针慢了无穷多倍，得找个时候重新写一次。不过这段代码好象是去年写的，也没经过什么性能测试，也难怪发现不了问题。在此帖上代码，等Lazy Script写完了重新审查一下自己的那套模板库（NTL，Non-standard Template Library，娃哈哈）。 &nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/04/28/48321.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/48321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-04-28 11:53 <a href="http://www.cppblog.com/vczh/archive/2008/04/28/48321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>