﻿<?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++博客-JUST DO IT</title><link>http://www.cppblog.com/xmoss/</link><description>我之所以在这里，只是因为我想要在这里</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:08:27 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:08:27 GMT</pubDate><ttl>60</ttl><item><title>TinyXML入门教程</title><link>http://www.cppblog.com/xmoss/archive/2009/08/10/92817.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 10 Aug 2009 08:38:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/08/10/92817.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/92817.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/08/10/92817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/92817.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/92817.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: TinyXML是一个开源的解析XML的解析库，能够用于C++，能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件，然后在内存中生成DOM模型，从而让我们很方便的遍历这棵XML树。<br>DOM模型即文档对象模型，是将整个文档分成多个元素（如书、章、节、段等），并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/08/10/92817.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/92817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-08-10 16:38 <a href="http://www.cppblog.com/xmoss/archive/2009/08/10/92817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>希尔排序（Windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/29/91641.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Wed, 29 Jul 2009 15:06:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/29/91641.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/91641.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/29/91641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/91641.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/91641.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 希尔排序实际上是一种分组插入排序，它的执行时间依赖于增量序列，而且是不稳定的。其基本思想是：先取一个小于n的整数d1作为第一个增量，把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序；然后，取第二个增量d2<d1重复上述的分组和排序，直至所取的增量dt=1(dt<dt-l<…<d2<d1)，即所有记录放在同一组中进行直接插入排序为止。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/29/91641.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/91641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-29 23:06 <a href="http://www.cppblog.com/xmoss/archive/2009/07/29/91641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>归并排序（Windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/27/91398.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 27 Jul 2009 15:13:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/27/91398.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/91398.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/27/91398.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/91398.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/91398.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 归并算法的核心操作就是将一维数组中前后相邻的两个两个有序序列合并成一个有序序列。合并算法也可以采用递归算法来实现，形式上较为简单,但实用性很差。合并算法的合并次数是一个非常重要的量,根据计算当数组中有3到4个元素时,合并次数是2次,当有5到8个元素时,合并次数是3次,当有9到16个元素时,合并次数是4次，按照这一规律,当有N个子序列时可以推断出合并的次数是X(2 >=N,符合此条件的最小那个X)。 &nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/27/91398.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/91398.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-27 23:13 <a href="http://www.cppblog.com/xmoss/archive/2009/07/27/91398.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高效异步IO的设计开发</title><link>http://www.cppblog.com/xmoss/archive/2009/07/25/91110.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Sat, 25 Jul 2009 03:18:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/25/91110.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/91110.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/25/91110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/91110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/91110.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 异步IO中也有高效低效之分，但主要还是要看具体的应用到底需要什么样机制。比如大家熟知的select就是个非常通用且跨平台的方法，由于select中需要把大量的时间花在维护IO句柄上，导致其效率大打折扣，一般来说，对于小并发的异步IO操作，比如普通的客户端或者是小并发量的服务器，它的效率可能也足够了。关于select的效率问题其实从各平台上对于FD_SETSIZE的定义就能看出一些来，在windows平台上，FD_SETSIZE是64，在Linux平台上是1024，也就是说，对于平台提供商来说也不指望他们提供的select能给你多大的并发吞吐能力。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/25/91110.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/91110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-25 11:18 <a href="http://www.cppblog.com/xmoss/archive/2009/07/25/91110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IO - 同步，异步，阻塞，非阻塞</title><link>http://www.cppblog.com/xmoss/archive/2009/07/25/91109.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Sat, 25 Jul 2009 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/25/91109.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/91109.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/25/91109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/91109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/91109.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 所谓的同步和异步，在这里指的是应用程序和内核之间的交互方式。如果应用程序不需要等待内核的回应，那么它就是异步的。如果应用程序提交完IO请求后，需要等待“回执”，那么它就是同步的。而阻塞和非阻塞，指的是应用程序是否等待IO操作的完成。如果应用程序必须等到IO操作实际完成以后再执行下面的操作，那么它是阻塞的。反之，如果不等待IO操作的完成就开始执行其它操作，那么它是非阻塞的。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/25/91109.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/91109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-25 11:14 <a href="http://www.cppblog.com/xmoss/archive/2009/07/25/91109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序（windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/20/90684.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 20 Jul 2009 15:51:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/20/90684.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/90684.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/20/90684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/90684.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/90684.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X)，用此基准将当前无序区划分为左右两个较小的无序区：R[1..I-1]和R[I+1..H]，且左边的无序子区中数据元素均小于等于基准元素，右边的无序子区中数据元素均大于等于基准元素，而基准X则位于最终排序的位置上，即R[1..I-1]≤X.Key≤R[I+1..H](1≤I≤H)，当R[1..I-1]和R[I+1..H]均非空时，分别对它们进行上述的划分过程，直至所有无序子区中的数据元素均已排序为止。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/20/90684.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/90684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-20 23:51 <a href="http://www.cppblog.com/xmoss/archive/2009/07/20/90684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>冒泡排序（Windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/20/90683.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 20 Jul 2009 15:50:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/20/90683.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/90683.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/20/90683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/90683.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/90683.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 两两比较待排序数据元素的大小，发现两个数据元素的次序相反时即进行交换，直到没有反序的数据元素为止。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/20/90683.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/90683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-20 23:50 <a href="http://www.cppblog.com/xmoss/archive/2009/07/20/90683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插入排序（Windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/20/90682.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 20 Jul 2009 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/20/90682.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/90682.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/20/90682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/90682.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/90682.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 每次将一个待排序的数据元素，插入到前面已经排好序的数列中的适当位置，使数列依然有序；直到待排序数据元素全部插入完为止。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/20/90682.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/90682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-20 23:48 <a href="http://www.cppblog.com/xmoss/archive/2009/07/20/90682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选择排序（Windows+VC6.0环境编译）</title><link>http://www.cppblog.com/xmoss/archive/2009/07/20/90681.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 20 Jul 2009 15:46:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/20/90681.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/90681.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/20/90681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/90681.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/90681.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 每一趟从待排序的数据元素中选出最小（或最大）的一个元素，顺序放在已排好序的数列的最后，直到全部待排序的数据元素排完。&nbsp;&nbsp;<a href='http://www.cppblog.com/xmoss/archive/2009/07/20/90681.html'>阅读全文</a><img src ="http://www.cppblog.com/xmoss/aggbug/90681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-20 23:46 <a href="http://www.cppblog.com/xmoss/archive/2009/07/20/90681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>va_list 详解</title><link>http://www.cppblog.com/xmoss/archive/2009/07/20/90680.html</link><dc:creator>xmoss</dc:creator><author>xmoss</author><pubDate>Mon, 20 Jul 2009 15:44:00 GMT</pubDate><guid>http://www.cppblog.com/xmoss/archive/2009/07/20/90680.html</guid><wfw:comment>http://www.cppblog.com/xmoss/comments/90680.html</wfw:comment><comments>http://www.cppblog.com/xmoss/archive/2009/07/20/90680.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cppblog.com/xmoss/comments/commentRss/90680.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xmoss/services/trackbacks/90680.html</trackback:ping><description><![CDATA[<p>VA_LIST 是在C语言中解决变参问题的一组宏</p>
<p>他有这么几个成员：</p>
<p>1） va_list型变量：</p>
<p>#ifdef&nbsp; _M_ALPHA<br>typedef struct {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *a0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* pointer to first homed integer argument */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int offset;&nbsp;&nbsp;&nbsp;&nbsp; /* byte offset of next parameter */<br>} va_list;<br>#else<br>typedef char *&nbsp; va_list;<br>#endif</p>
<p>2）_INTSIZEOF 宏，获取类型占用的空间长度，最小占用长度为int的整数倍：</p>
<p>#define _INTSIZEOF(n)&nbsp;&nbsp; ( (sizeof(n) + sizeof(int) - 1) &amp; ~(sizeof(int) - 1) )</p>
<p>3）VA_START宏，获取可变参数列表的第一个参数的地址（ap是类型为va_list的指针，v是可变参数最左边的参数）：</p>
<p>#define va_start(ap,v)&nbsp; ( ap = (va_list)&amp;v + _INTSIZEOF(v) )</p>
<p>4）VA_ARG宏，获取可变参数的当前参数，返回指定类型并将指针指向下一参数（t参数描述了当前参数的类型）：</p>
<p>#define va_arg(ap,t)&nbsp;&nbsp;&nbsp; ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )</p>
<p>5）VA_END宏，清空va_list可变参数列表：</p>
<p>#define va_end(ap)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( ap = (va_list)0 )</p>
<p>VA_LIST的用法：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）首先在函数里定义一具VA_LIST型的变量，这个变量是指向参数的指针；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）然后用VA_START宏初始化变量刚定义的VA_LIST变量；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （3）然后用VA_ARG返回可变的参数，VA_ARG的第二个参数是你要返回的参数的类型（如果函数有多个可变参数的，依次调用VA_ARG获取各个参数）；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （4）最后用VA_END宏结束可变参数的获取。<br>使用VA_LIST应该注意的问题：<br>&nbsp;&nbsp; （1）可变参数的类型和个数完全由程序代码控制,它并不能智能地识别不同参数的个数和类型；<br>&nbsp;&nbsp; （2）如果我们不需要一一详解每个参数，只需要将可变列表拷贝至某个缓冲，可用vsprintf函数；<br>&nbsp;&nbsp; （3）因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利.不利于我们写出高质量的代码；</p>
<p>小结：可变参数的函数原理其实很简单，而VA系列是以宏定义来定义的，实现跟堆栈相关。我们写一个可变参数的C函数时，有利也有弊,所 以在不必要的场合，我们无需用到可变参数，如果在C++里，我们应该利用C++多态性来实现可变参数的功能，尽量避免用C语言的方式来实现。<br>本文参考：<a href="http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html">http://hi.baidu.com/kang_liang/blog/item/168c9059a9a1ca2d2934f05f.html</a></p>
<img src ="http://www.cppblog.com/xmoss/aggbug/90680.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xmoss/" target="_blank">xmoss</a> 2009-07-20 23:44 <a href="http://www.cppblog.com/xmoss/archive/2009/07/20/90680.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>