﻿<?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>IT博客-学而不思则罔，思而不学则殆</title><link>http://www.cnitblog.com/schkui/</link><description>有其事必有其理，
有其理必有其事 </description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 05:57:35 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 05:57:35 GMT</pubDate><ttl>60</ttl><item><title>CAsyncSocket和CSocket编程 </title><link>http://www.cnitblog.com/schkui/archive/2013/09/27/88683.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Fri, 27 Sep 2013 09:41:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/09/27/88683.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/88683.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/09/27/88683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/88683.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/88683.html</trackback:ping><description><![CDATA[<p>这两个类对Winsock API进行了封装，CAsyncSocket是一个异步非阻塞套接字类，CSocket是继承于CAsyncSocket的同步阻塞套接字类。使用这两个类编程无需自己处理Winsock的I/O模型。</p>
<p>CAsyncSocket类提供的唯一抽象就是将与套接字相连的windows消息以回调函数的形式完成，在创建程序时只需要重载这几个函数就可以实现Winsock的I/O操作。</p>
<p>异步模型效率更高，使用起来更灵活，当然也比较难，因为你要手动检测会显得错误或者阻塞的具体情况。当你需要通信的对端系统可能只允许你建立一个SOCKET连接时，就用CAsyncSocket。</p>
<p>CAsyncSocket用于在少量连接时，处理大批量无步骤依赖性的业务。CSocket用于处理步骤依赖性业务，或在可多连接时配合多线程使用。</p>
<h1><font color="#4bacc6">CAsyncSocket事件处理</font></h1>
<p>当你使用CAsyncSocket::Create创建一个指定兴趣事件的异步套接字时，这些消息究竟是怎么接收和处理的呢？</p>
<p>MFC定义了一个内部的类CSocketWnd，当调用Create函数创建一个套接字时，就会将该套接字连接到一个窗口(CSoketWnd的对象)，并且使用WSAAsyncSelect（Winsock I/O模型）将套接字和此窗口对相关联。CAsyncSocket的DoCallBack函数为该窗口的回调函数。这样，当一个网络事件发生时，经过MFC的消息循环，DoCallBack函数会根据不同的事件调用相应的消息处理函数。MFC将这些消息处理函数定义为虚函数，在编程时必须重载需要的消息处理函数CAsyncSocket::OnReceive()，CAsyncSocket::OnSend()，CAsyncSocket::OnAccept()，CAsyncSocket::OnConnect()，CAsyncSocket::OnClose()，CAsyncSocket:OnOutOfBandData()。</p>
<p>客户方在使用CAsyncSocket::Connect()时，往往返回一个WSAEWOULDBLOCK的错误(其它的某些函数调用也如此)，实际上这不应该算作一个错误，它是Socket提醒我们，由于你使用了非阻塞Socket方式，所以(连接)操作需要时间，不能瞬间建立。既然如此，我们可以等待呀，等它连接成功为止，于是许多程序员就在调用Connect()之后，Sleep(0)，然后不停地用WSAGetLastError()或CAsyncSocket::GetLastError()查看Socket返回的错误，直到返回成功为止。这是一种错误的做法，断言，你不能达到预期目的。事实上，我们可以在Connect()调用之后等待CAsyncSocket::OnConnect()事件被触发，CAsyncSocket::OnConnect()是要表明Socket要么连接成功了，要么连接彻底失败了。至此，我们在CAsyncSocket::OnConnect()被调用之后就知道是否Socket连接成功了，还是失败了。<br />类似的，Send()如果返回WSAEWOULDBLOCK错误，我们在OnSend()处等待，Receive()如果返回WSAEWOULDBLOCK错误，我们在OnReceive()处等待，以此类推。 
<p>总之，尽量使用这些回调函数处理事件，而不要自己查询处理。 
<h1><font color="#4bacc6">CSocket事件处理</font></h1>
<p>主要是要了解他继承了CAsyncSocket之后，如何从异步非阻塞编程同步阻塞模式的。</p>
<p>CSocket在Connect()返回WSAEWOULDBLOCK错误时，不是在OnConnect()，OnReceive()这些事件终端函数里去等待。你先必须明白Socket事件是如何到达这些事件函数里的。这些事件处理函数是靠CSocketWnd窗口对象回调的，而窗口对象收到来自Socket的事件，又是靠线程消息队列分发过来的。总之，Socket事件首先是作为一个消息发给CSocketWnd窗口对象，这个消息肯定需要经过线程消息队列的分发，最终CSocketWnd窗口对象收到这些消息就调用相应的回调函数(OnConnect()等)。<br />&nbsp;&nbsp; 所以，CSocket在调用Connect()之后，如果返回一个WSAEWOULDBLOCK错误时，它马上进入一个消息循环，就是从当前线程的消息队列里取关心的消息，如果取到了WM_PAINT消息，则刷新窗口，如果取到的是Socket发来的消息，则根据Socket是否有操作错误码，调用相应的回调函数(OnConnect()等)。<br />大致的简化代码为： 
<p>BOOL CSocket::Connect( ... )<br />{<br />&nbsp;&nbsp; if( !CAsyncSocket::Connect( ... ) )<br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; if( WSAGetLastError() == WSAEWOULDBLOCK ) //由于异步操作需要时间，不能立即完成，所以Socket返回这个错误<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp; //进入消息循环，以从线程消息队列里查看FD_CONNECT消息，直到收到FD_CONNECT消息，认为连接成功。<br />&nbsp;&nbsp;&nbsp;&nbsp; while( PumpMessages( FD_CONNECT ) );<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp; }<br />} 
<h1><font color="#4bacc6">CAsyncSocket、CSocket编程</font></h1>
<p>在MFC中进行socket编程需要在应用程序类的Initlnstance中调用AfxSocketlnit初始化套接字。如果使用AppWizard创建应用程序的基本框架时，选中了&#8220;WindowsSockets&#8221;复选框，那么将自动添加初始化代码。</p>
<p>if (!AfxSocketInit())<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox(IDP_SOCKETS_INIT_FAILED);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>CSocket不需要bind(),在Create()时会调用bind()函数绑定此套接字。</p>
<p>CSocket一个重要的用处是可用于串行化技术，要结合CSocketFile 和 CArchive。</p>
<p>服务器端程序：</p>
<p>CSocketFile　file(&amp;sockRecv);<br />CArchive　arin(&amp;file,CArchive::load);<br />CArchive　arout(&amp;file,CArchive::load);<br />arin&gt;&gt;dwValue;&nbsp;&nbsp; //发送数据<br />arout &lt;&lt;dwValue;//接收数据</p>
<p>客户端程序：<br />CSocketFile　file(&amp;sockClient);<br />CArchive　arin(&amp;file,CArchive：：load);<br />CArchive　arout(&amp;file,CArchive：：load);<br />arin&gt;&gt;dwValue;&nbsp;&nbsp; //发送数据<br />arout&lt;&lt;dwValue;//接收数据</p><img src ="http://www.cnitblog.com/schkui/aggbug/88683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-09-27 17:41 <a href="http://www.cnitblog.com/schkui/archive/2013/09/27/88683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>opencv cv::MAT 和 QT QImage 相互转化代码</title><link>http://www.cnitblog.com/schkui/archive/2013/09/05/88529.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Thu, 05 Sep 2013 02:33:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/09/05/88529.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/88529.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/09/05/88529.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/88529.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/88529.html</trackback:ping><description><![CDATA[<div>
<div><strong style="color: red;">&nbsp;QImage&nbsp;</strong><strong style="color: red;">&#8212;&#8212;&#8212;&#8212;》</strong><strong style="color: red;">&nbsp;cv::Mat</strong><br />&nbsp;cv::Mat mat = cv::Mat(m_leftQimage-&gt;height(), m_leftQimage-&gt;width(), CV_8UC4, (uchar*)m_leftQimage-&gt;bits(), m_leftQimage-&gt;bytesPerLine());&nbsp;</div>
<div>&nbsp;cv::Mat _small_mat ;// = cv::Mat(cv::Size(320,240),CV_8UC3);</div>
<div>&nbsp;cv::resize(mat,_small_mat, cv::Size(320, 240)) ;</div>
<div>&nbsp;cv::cvtColor(_small_mat, _small_mat, CV_BGR2RGB);</div>
<div>&nbsp;<span style="color: red;"><strong>cv::Mat &nbsp;</strong></span><strong style="color: red;">&#8212;&#8212;&#8212;&#8212;》&nbsp;</strong><span style="color: red;"><strong>&nbsp;QImage</strong></span><br /><br />&nbsp;QImage img = QImage((const unsigned char*)_small_mat.data, &nbsp;_small_mat.cols, _small_mat.rows, &nbsp;_small_mat.cols * _small_mat.channels(), &nbsp; //new add &nbsp;&nbsp;</div>
<div><span style="white-space:pre">	</span> QImage::Format_RGB888);</div>
</div><img src ="http://www.cnitblog.com/schkui/aggbug/88529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-09-05 10:33 <a href="http://www.cnitblog.com/schkui/archive/2013/09/05/88529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>美团云计算方面面试题 </title><link>http://www.cnitblog.com/schkui/archive/2013/05/15/87416.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Wed, 15 May 2013 02:52:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/05/15/87416.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87416.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/05/15/87416.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87416.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87416.html</trackback:ping><description><![CDATA[<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-size: 18px">1、Linux进程间的通信方式？两个进程是如何来共享内存的？两个进程如何通过信号量通信？</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（1）Linux下进程间通信的方式有： 管道(有名/无名) 、消息、信号、信号量、共享内存、邮箱、socket。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（2）Linux下共享内存是进程间通信的方式之一，共享内存允许两个或多个进程访问同一块内存，比如像 malloc函数 向不同的进程返回执行同一块物理内存区域的指针。当一个进程改变了这块地址中的内容的时候，其他拥有这块物理内存指针的进程也会察觉到这个更改。在进程间的通信方式中，共享内存是通信效率最高的，访问共享内存区域和访问进程独有的内存区域一样快，并不需要通过系统调用或者其他通过内核的过程来完成，同时也避免了各种不必要的复制。对共享内存的操作涉及到多个进程间的同步问题，数据应该先写，在读，通常采用用信号量来协调这个过程。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="color: rgb(255,0,0)">进程与线程的区别？回答方式：</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">线程是进程中的一个逻辑执行单元，也是进程中可调度的实体；一个进程中可以包含多个线程，但是一个线程只能隶属于一个进程</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">与进程的区别：</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">1、CPU调度方面：CPU调度是以线程为基本单位进行的；</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">2、拥有资源方面：进程是拥有资源的基本单位，线程不拥有系统的资源，但是可以使用隶属于进程的资源；</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">3、并发方面： 线程 和 进程都支持并发；</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">4、系统开销方面： 创建进程的时候需要为进程分配资源，销毁进程时需要回收资源，所以使用进程的开销要大于使用线程的开销。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">进程控制块?</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">操作系统通过进程控制块来对进程控制和管理的。PCB通常在系统内存中占用一块连续的分区，它存放着操作系统用于描述进程情况以及控制进程运行情况所需的全部信息，</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">为什么要CPU调度？</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">CPU调度的目标是在任何时候都有某些进程在运行，是CPU使用率最大化。 &nbsp;同一时刻 只有一个进程占有CPU资源，但一个进程在等待IO时等等一些阻塞进程的动作时，CPU就回空闲出来，这时候，我们应该让这个阻塞的进程让出CPU资源，让其他已经处于就绪状态的进程执行。这样就可以使CPU使用率最大化。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">什么是死锁？</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">在多道程序环境下，多个进程可能竞争一定数量的资源，某个进程申请资源，如果这时这个资源不可用，那么这个进程就进入等待状态。如果所申请的资源被其他等待进程占有，那么该等待进程可能再也无法改变其状态，一直等待下去，这种情况称之为 死锁。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">cache的作用？</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">cache是处于 CPU寄存器 和 内存之间的一层缓存，用来加快CPU的取指速率， 使用时： CPU需要数据时，首先会查找cache中有没有需要的数据，如果有，则取走，如果没有，则查询内存，并将数据更新到缓存中，以供下次取指。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p></blockquote>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">2、DNS (Domain name system)域名系统，简单描述其工作原理。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">DNS客户机需要在程序中使用名称时，它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息：包括：指定的DNS域名，指定的查询类型，DNS域名指定的类别。它是基于UDP的服务，端口是53，该应用一般不直接为用户使用，而是为其他应用服务 如 HTTP、SMTP等在其中需要完成主机名到IP地址转换。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'; color: rgb(255,0,0)"><strong>在浏览器地址栏内敲 www.baidu.com 到这个页面显示在浏览器上，这个过程中都发生了什么？</strong></span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（1） 当我们在浏览器上敲入一个url是， 浏览器会解析出该url的域名，接下来的动作，是将域名转化为 ID 地址，依次查询 浏览器DNS缓存、系统缓存、路由器缓存、如果没有找到 则一直查询到 根域名服务器缓存，找到域名所对应的的 IP地址。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（2）向IP所对应的的服务器发送请求数据，</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（3）服务器响应请求，发回网页内容；</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（4）客户端浏览器获取网页内容，解析，并显示在浏览器上。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">这就是我们所看到的的 百度页面显现的过程。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p></blockquote>3、TCP/UDP的区别？ 
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（1）TCP是面向连接的、可靠数据传输协议，UDP是不面向连接的，非可靠数据传输协议；（2） 从传输速度上考虑： TCP 由于要建立连接、保证数据传输的可靠性等造成数据传输速度比较慢，UDP不需要这些，数据传输速度相对比较快；（3）从安全方面考虑，TCP的安全性能更高，UDP的安全性能比较低 （4）从传输数据的格式来比较，TCP传输的单位称为报文段，UDP传输的数据单位被称为 数据报</p></blockquote>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">4、ICMP协议</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">ICMP (Internet Control Message Protocol) ，因特网控制消息协议。它是TCP/IP协议族的一个子协议，用于在IP主机、路由器之间传输控制消息。控制消息包括：网络不同、主机是否可达、路由器是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据，但对用户数据的传递起着很重要的作用。ICMP报文格式两种： 差错报告报文和询问报文。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p></blockquote>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">5、数据库</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'; color: rgb(255,0,0)">数据库 一个 逻辑执行单元 如何才能被称的上是一个事务？ 必须满足的性质？</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">数据库的事务是指 一个逻辑单元，这个逻辑单元可包含一系列的执行操作， 一个逻辑单元要想成为一个事务，必须满足所谓的 ACID （原子性、隔离性、一致性、持久性）；</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">原子性：指的是 一个事务执行，要么全部执行成功，要么执行失败回滚到执行之前的状态；</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">一致性：事务执行过后，数据库中数据的状态都必须是一致的，必须遵从数据库的完整性约束；</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">隔离性：对于多个事务并发的时候，</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">持久性： 事务的完成后对系统的影响是持久的，任何一个事务的操作不会对其他事务造成干扰；比如一个事务在读数据库，一个事务在写数据库，读数据库的这个事务读到的数据，要么是这个写数据库事务 写前的状态，要么为写后的状态，不存在 读到的数据是 另一个事务写的过程中的一个状态。</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'; color: rgb(255,0,0)">数据库索引？</span></p></blockquote>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p></blockquote>6、内存管理<br />
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px" sizset="27" sizcache="0">
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">内存的段页式管理的优缺点？</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">分段：</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">在段式存储管理中，将程序的地址空间（进程地址空间）划分为若干个段(segment)，这样每个进程都有一个二维的地址空间，相互独立，互不干扰。程序通过分段来划分为多个模块，如代码段、数据段、共享段等，这样做的优点是：可以分别编译源程序的一个文件，并且可以针对不同类型的段采取不同的保护，也可以按段为单位进行共享。段式存储管理的优点是：没有内碎片，外碎片可以通过内存紧缩来消除，便于实现内存共享。</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'"><br /></span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">分页：将程序的逻辑地址空间划分为固定大小的页 (page)，而物理内存划分为同样大小的页框(pageframe)。程序加载时，可以将任意一页放入内存中的任意一个页框，这些页框不必连续，从而实现了离散分配。这种管理的优势是：没有外碎片，且一个程序不必连续存放，这样就便于更改程序占用的空间大小。</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">页式 和 段式系统有许多相似之处，比如，两者都采用离散的分配方式，都通过地址映射机构来实现地址变换。但概念上两者是有很多区别的，主要表现在：</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">[1]、页是信息的物理单位， 段是信息的逻辑单位，每个逻辑单元分为一个段。</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">[2]、页大小固定由系统决定，把逻辑地址划分为页号和页内地址两部分，段的长度不固定，且决定于用户编写的程序</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><span style="font-family: 'Comic Sans MS'">[3]、页式系统地址空间是一维的，即为单一的线性地址空间，程序员只需利用一个标识符，即可表示一个地址。分段的作业地址空间是二维的，程序员在标识一个地址时，既需给出段名，又需给出段内地址。</span></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px" sizset="27" sizcache="0"><span style="font-family: 'Comic Sans MS'" sizset="27" sizcache="0"><a style="color: rgb(202,0,0); text-decoration: none" href="http://dongxicheng.org/os/linux-memory-management-basic/">http://dongxicheng.org/os/linux-memory-management-basic/</a></span><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">内存：</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（1）虚拟内存： 计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存（一块连续完整的地址空间），而实际上，他/她通常被分割成多个物理内存碎片，还有部分占时存储在外部磁盘存储器上，在需要时进行交换数据。与没有虚拟内存技术的系统相比，使用这种技术的系统使得大型程序编写变得更容易，对真正的物理内存使用的更有效率。</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">（2）物理内存：实际的内存，物理地址被分成离散的单元，称为页，页面大小是跟操作系统的位数有关系，一般为4K</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"><br /></p></blockquote>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px">7、程序内存分区</p>
<p style="padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; padding-top: 0px"></p>
<blockquote style="border-bottom-style: none; padding-bottom: 0px; border-right-style: none; margin: 0px 0px 0px 40px; padding-left: 0px; padding-right: 0px; border-top-style: none; border-left-style: none; padding-top: 0px">
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">5个分区：</p>
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">堆区：用户在这进行动态内存分配区，</p>
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">栈区：系统自动分配，自动回收，速度快，效率高，但是栈区比较小，小心 栈溢出</p>
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">全局区： &nbsp;存储全局变量和静态变量，</p>
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">文字常量区：常量字符串就存储在这，程序结束后，由系统同一释放。</p>
<p style="padding-bottom: 0px; line-height: 26px; margin-top: 0px; font-family: Arial; margin-bottom: 0px; font-size: 14px; padding-top: 0px">程序代码区：存放程序的二进制代码。</p></blockquote><img src ="http://www.cnitblog.com/schkui/aggbug/87416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-05-15 10:52 <a href="http://www.cnitblog.com/schkui/archive/2013/05/15/87416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]NoSQL数据库笔谈</title><link>http://www.cnitblog.com/schkui/archive/2013/04/20/87327.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Sat, 20 Apr 2013 12:30:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/04/20/87327.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87327.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/04/20/87327.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87327.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87327.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: databases , appdir , node , paper颜开 , v0.2 , 2010.2 序思想篇 CAP最终一致性 变体 BASE其他 I/O的五分钟法则不要删除数据RAM是硬盘,硬盘是磁带Amdahl定律和Gustafson定律万兆以太网 手段篇 一致性哈希 亚马逊的现状算法的选择 Quorum NRWVector clockVirtual nod...&nbsp;&nbsp;<a href='http://www.cnitblog.com/schkui/archive/2013/04/20/87327.html'>阅读全文</a><img src ="http://www.cnitblog.com/schkui/aggbug/87327.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-04-20 20:30 <a href="http://www.cnitblog.com/schkui/archive/2013/04/20/87327.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 串口编程 主要代码 </title><link>http://www.cnitblog.com/schkui/archive/2013/03/22/87134.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Fri, 22 Mar 2013 03:57:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/22/87134.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87134.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/22/87134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87134.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;1#include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;stdio.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.cnitblog.com/schkui/archive/2013/03/22/87134.html'>阅读全文</a><img src ="http://www.cnitblog.com/schkui/aggbug/87134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-22 11:57 <a href="http://www.cnitblog.com/schkui/archive/2013/03/22/87134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转 TCP协议三次握手过程分析</title><link>http://www.cnitblog.com/schkui/archive/2013/03/22/87133.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Fri, 22 Mar 2013 03:53:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/22/87133.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87133.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/22/87133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87133.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87133.html</trackback:ping><description><![CDATA[<div id="cnblogs_post_body">转自 <a href="http://www.cnblogs.com/rootq/articles/1377355.html">http://www.cnblogs.com/rootq/articles/1377355.html</a><br /><br />
<p>TCP(Transmission Control Protocol)　传输控制协议</p>
<p>TCP是主机对主机层的传输控制协议，提供可靠的连接服务，采用三次握手确认建立一个连接:</p>
<p>位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)</p>
<p>Sequence number(顺序号码) Acknowledge number(确认号码)</p>
<p>第一次握手：主机A发送位码为syn＝1,随机产生seq number=1234567的数据包到服务器，主机B由SYN=1知道，A要求建立联机；</p>
<p>第二次握手：主机B收到请求后要确认联机信息，向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包</p>
<p>第三次握手：主机A收到后检查ack number是否正确，即第一次发送的seq number+1,以及位码ack是否为1，若正确，主机A会再发送ack number=(主机B的seq+1),ack=1，主机B收到后确认seq值与ack=1则连接建立成功。</p>
<p>完成三次握手，主机A与主机B开始传送数据。</p><font color="#0000ff"></font>
<p><font color="#0000ff"><br />在TCP/IP协议中，TCP协议提供可靠的连接服务，采用三次握手建立一个连接。 <br />第一次握手：建立连接时，客户端发送syn包(syn=j)到服务器，并进入SYN_SEND状态，等待服务器确认； <br />第二次握手：服务器收到syn包，必须确认客户的SYN（ack=j+1），同时自己也发送一个SYN包（syn=k），即SYN+ACK包，此时服务器进入SYN_RECV状态； 第三次握手：客户端收到服务器的SYN＋ACK包，向服务器发送确认包ACK(ack=k+1)，此包发送完毕，客户端和服务器进入ESTABLISHED状态，完成三次握手。 完成三次握手，客户端与服务器开始传送数据.</font><br /></p>
<p>实例:</p>
<p>IP 192.168.1.116.3337 &gt; 192.168.1.123.7788: S 3626544836:3626544836<br />IP 192.168.1.123.7788 &gt; 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837<br />IP 192.168.1.116.3337 &gt; 192.168.1.123.7788: ack 1739326487,ack 1</p>
<p>第一次握手：192.168.1.116发送位码syn＝1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;</p>
<p>第二次握手：192.168.1.123收到请求后要确认联机信息，向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;</p>
<p>第三次握手：192.168.1.116收到后检查ack number是否正确，即第一次发送的seq number+1,以及位码ack是否为1，若正确，192.168.1.116会再发送ack number=1739326487,ack=1，192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。</p>
<p>&nbsp;</p>
<p>图解：<br />一个三次握手的过程（图1，图2）<br /><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/rootq/410601/r_1.jpg" /></p>
<p>&nbsp;</p>
<p>（图1）<br /><img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/rootq/410601/r_2.jpg" /><br />（图2）<br />&nbsp;</p>
<p>&nbsp;</p>
<p>第一次握手的标志位（图3）<br />我们可以看到标志位里面只有个同步位，也就是在做请求(SYN)<br /><img alt="3" src="http://images.cnblogs.com/cnblogs_com/rootq/410601/r_3.jpg" />&nbsp;<br />&nbsp;（图3）<br /><br />第二次握手的标志位（图4）<br />我们可以看到标志位里面有个确认位和同步位，也就是在做应答(SYN + ACK)<br /><img alt="4" src="http://images.cnblogs.com/cnblogs_com/rootq/410601/r_4.jpg" />&nbsp;<br />（图4）<br /><br />第三次握手的标志位（图5）<br />我们可以看到标志位里面只有个确认位，也就是再做再次确认(ACK)<br /><img alt="5" src="http://images.cnblogs.com/cnblogs_com/rootq/410601/r_5.jpg" />&nbsp;<br />&nbsp;<br />（图5）<br /><br />一个完整的三次握手也就是 请求---应答---再次确认</p></div><img src ="http://www.cnitblog.com/schkui/aggbug/87133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-22 11:53 <a href="http://www.cnitblog.com/schkui/archive/2013/03/22/87133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易谈  04  C/C++语言 strlen wcslen sizeof的使用 和 char与wchar_t区别</title><link>http://www.cnitblog.com/schkui/archive/2013/03/18/87099.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 18 Mar 2013 15:36:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/18/87099.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87099.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/18/87099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87099.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87099.html</trackback:ping><description><![CDATA[<span style="font-size: small"><font size="2">char*--strlen()返回的是字节数（对中英文不一致，中文占两个字节，不包括'/0'），<br />wchar_t--wcslen返回的是字符数（对中英文一致）。<br />sizeof返回的是字节数（包含'/0'，而'/0'在Unicode下也是占两个字节的）。<br /><br />// 测试代码待写</font></span><img src ="http://www.cnitblog.com/schkui/aggbug/87099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-18 23:36 <a href="http://www.cnitblog.com/schkui/archive/2013/03/18/87099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易谈03 C++   重载与重写</title><link>http://www.cnitblog.com/schkui/archive/2013/03/18/87094.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 18 Mar 2013 09:01:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/18/87094.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87094.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/18/87094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87094.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87094.html</trackback:ping><description><![CDATA[1、重载:<br />方法名相同，参数列表不同<br />2、重写：<br />也叫覆盖，指在子类中定义一个与父类中方法同名同参数列表的方法。因为子类会继承父类的方法，而重写就是将从父类继承过来的方法重新定义一次，重新填写方法中的代码 <br /><br />// 待写 <img src ="http://www.cnitblog.com/schkui/aggbug/87094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-18 17:01 <a href="http://www.cnitblog.com/schkui/archive/2013/03/18/87094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易谈02 C++  类的成员初始化列表 member initialization list</title><link>http://www.cnitblog.com/schkui/archive/2013/03/18/87092.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 18 Mar 2013 07:56:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/18/87092.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87092.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/18/87092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87092.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87092.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主要参考 Effective C++&nbsp; 第四条款&nbsp; 确定对象被使用前一辈初始化&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Make sure that Objects are initialized before they're used</p>
<ul><li>成员初始化列表 member initialization list ，是用逗号分开的程序以及初始值的列表。 <br /></li><li>对于大多数类型而言，只调用一次Copy 构造函数， 比起来先调default 构造函数后，在调用copy assignment 操作符，有时候高效很多。对于内置的类型，其实初始化和赋值的成本是相同。但是为了一致性也通过程序初值来初始化。<br /></li><li>对于Const &nbsp;和 reference 他们一定是要有初值， 不能被赋值。 所以只能在这里了 。见代码。<br />&nbsp;&nbsp; 
<p>&nbsp;&nbsp; // 编译vc++ 2010 错误提示<br />&nbsp;&nbsp;// error C2758: &#8220;CK::CNoOrderMemeberInitialization::a_ref&#8221;: 必须在构造函数基/成员初始值设定项列表中初始化<br />&nbsp;&nbsp;//int &amp; a_ref ;<br /><br />&nbsp;&nbsp;// 编译vc++ 2010 错误提示<br />&nbsp;&nbsp;// error C2758: &#8220;CK::CNoOrderMemeberInitialization::MAX_LEN&#8221;: 必须在构造函数基/成员初始值设定项列表中初始化<br />&nbsp;&nbsp;//const int&nbsp; MAX_LEN ;</p></li><li>
<p>&nbsp;class 的成员变量的总是以其声明的顺序初始化。 </p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000">#include&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">stdafx.h</span><span style="color: #000000">"</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />#include&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_41_115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_115_Open_Text.style.display='none'; Codehighlighter1_41_115_Closed_Image.style.display='inline'; Codehighlighter1_41_115_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_41_115_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_41_115_Closed_Text.style.display='none'; Codehighlighter1_41_115_Open_Image.style.display='inline'; Codehighlighter1_41_115_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_41_115_Closed_Text">/**/</span><span id="Codehighlighter1_41_115_Open_Text"><span style="color: #808080">////////////////////////////////////////////////////////////////////////</span><span style="color: #008000">//</span><span style="color: #808080"></span></span><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><span style="color: #008000">//</span><span style="color: #008000">&nbsp;一个不按照&nbsp;内部声明顺序&nbsp;进行member&nbsp;initialization</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;CK<br /><img id="Codehighlighter1_169_713_Open_Image" onclick="this.style.display='none'; Codehighlighter1_169_713_Open_Text.style.display='none'; Codehighlighter1_169_713_Closed_Image.style.display='inline'; Codehighlighter1_169_713_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_169_713_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_169_713_Closed_Text.style.display='none'; Codehighlighter1_169_713_Open_Image.style.display='inline'; Codehighlighter1_169_713_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_169_713_Closed_Text"><img alt="" src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_169_713_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CNoOrderMemeberInitialization<br /><img id="Codehighlighter1_209_710_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_710_Open_Text.style.display='none'; Codehighlighter1_209_710_Closed_Image.style.display='inline'; Codehighlighter1_209_710_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_209_710_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_209_710_Closed_Text.style.display='none'; Codehighlighter1_209_710_Open_Image.style.display='inline'; Codehighlighter1_209_710_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_209_710_Closed_Text"><img alt="" src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_209_710_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CNoOrderMemeberInitialization(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;x,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;y)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;n_second(x)&nbsp;,&nbsp;n_first(&nbsp;n_second&nbsp;)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这里先初始化n_second，&nbsp;然后再给n_first赋值&nbsp;&nbsp;？？会怎么样</span><span style="color: #008000"><br /><img id="Codehighlighter1_349_354_Open_Image" onclick="this.style.display='none'; Codehighlighter1_349_354_Open_Text.style.display='none'; Codehighlighter1_349_354_Closed_Image.style.display='inline'; Codehighlighter1_349_354_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_349_354_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_349_354_Closed_Text.style.display='none'; Codehighlighter1_349_354_Open_Image.style.display='inline'; Codehighlighter1_349_354_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_349_354_Closed_Text"><img alt="" src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_349_354_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">CNoOrderMemeberInitialization()<br /><img id="Codehighlighter1_393_398_Open_Image" onclick="this.style.display='none'; Codehighlighter1_393_398_Open_Text.style.display='none'; Codehighlighter1_393_398_Closed_Image.style.display='inline'; Codehighlighter1_393_398_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_393_398_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_393_398_Closed_Text.style.display='none'; Codehighlighter1_393_398_Open_Image.style.display='inline'; Codehighlighter1_393_398_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_393_398_Closed_Text"><img alt="" src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_393_398_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;n_first&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;n_second&nbsp;;&nbsp;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;编译vc++&nbsp;2010&nbsp;错误提示<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;error&nbsp;C2758:&nbsp;&#8220;CK::CNoOrderMemeberInitialization::a_ref&#8221;:&nbsp;必须在构造函数基/成员初始值设定项列表中初始化<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">int&nbsp;&amp;&nbsp;a_ref&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;编译vc++&nbsp;2010&nbsp;错误提示<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;error&nbsp;C2758:&nbsp;&#8220;CK::CNoOrderMemeberInitialization::MAX_LEN&#8221;:&nbsp;必须在构造函数基/成员初始值设定项列表中初始化<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">const&nbsp;int&nbsp;&nbsp;MAX_LEN&nbsp;;</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;_tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_755_1006_Open_Image" onclick="this.style.display='none'; Codehighlighter1_755_1006_Open_Text.style.display='none'; Codehighlighter1_755_1006_Closed_Image.style.display='inline'; Codehighlighter1_755_1006_Closed_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_755_1006_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_755_1006_Closed_Text.style.display='none'; Codehighlighter1_755_1006_Open_Image.style.display='inline'; Codehighlighter1_755_1006_Open_Text.style.display='inline';" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_755_1006_Closed_Text"><img alt="" src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_755_1006_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;CK::CNoOrderMemeberInitialization&nbsp;&nbsp;test(</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;,</span><span style="color: #000000">10</span><span style="color: #000000">)&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">期盼着&nbsp;test.n_first=2&nbsp;&nbsp;test.n_second=2<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">程序的输出test.n_first=-858993460&nbsp;&nbsp;test.n_second=2</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test.n_first=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;test.n_first&nbsp;&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;&nbsp;test.n_second=</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;test.n_second&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;std::endl&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span></div><br />
<p>&nbsp;</p></li></ul>
<p><br /><br /><br /></p> <img src ="http://www.cnitblog.com/schkui/aggbug/87092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-18 15:56 <a href="http://www.cnitblog.com/schkui/archive/2013/03/18/87092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易谈01   视C++为一个语言联邦联邦   View C++ as  a federation of languages</title><link>http://www.cnitblog.com/schkui/archive/2013/03/18/87091.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 18 Mar 2013 06:36:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/18/87091.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87091.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/18/87091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87091.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87091.html</trackback:ping><description><![CDATA[<ul><li>&nbsp;C&nbsp; 说到底C++仍然是个C为基础，区块（blocks），语句（statements）,预处理（preprocessor）,内置数据类型（built-in data types）,数组 (arrays) ,&nbsp;指针（points）&nbsp;等统统是来自C，很多时候C++对问题的解法不过是较高基本的C的接法， （条款2的预处理之外的另外选择，12 的对象资源的管理）&nbsp;，但是当你以C++内的Ｃ成分工作时候，搞笑的编程守则映照出Ｃ的局限，没有模板templates, 没有异常 ，没有重载。</li><li>&nbsp;Object-Orented C++&nbsp; 这部分也就是C with Class所诉求&nbsp; <br />&nbsp;Classes （包括构造函数和析构函数）<br />&nbsp;封装(encapsulation) <br />&nbsp;继承(inheritance)<br />&nbsp;多态(polymorphism)[<span style="color: red">运行时多态是动态多态，其具体引用的</span><a href="http://baike.baidu.com/view/2387.htm" target="_blank"><u><font color="#0000ff"><span style="color: red">对象</span></font></u></a><span style="color: red">在运行时才能确定。编译时多态是</span><a href="http://baike.baidu.com/view/612026.htm" target="_blank"><u><font color="#0000ff"><span style="color: red">静态</span></font></u></a><span style="color: red">多态，在编译时就可以确定</span><a href="http://baike.baidu.com/view/2387.htm" target="_blank"><u><font color="#0000ff"><span style="color: red">对象</span></font></u></a><span style="color: red">使用的形式。]<br /></span><span style="color: #000000">virtual 函数(动态绑定) 这一部分是面向对象的设计古典守则在C++直接实施</span></li><li><span style="color: #000000">Template C++ 是C++ 泛型编程部分，<br />还带来的崭新的编程泛型 template metaprogramming (TMP 模板元编程） ---参照C++ 新思维</span></li><li><span style="color: #000000">ＳＴＬ 是个template 程序库，他对容器（containers)&nbsp; 迭代器（iterators)&nbsp; 算法（algorithms)&nbsp; 以及函数对象<br />function objects</span></li></ul> <img src ="http://www.cnitblog.com/schkui/aggbug/87091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-18 14:36 <a href="http://www.cnitblog.com/schkui/archive/2013/03/18/87091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GCC和C99的不定参数宏</title><link>http://www.cnitblog.com/schkui/archive/2013/03/15/87066.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Fri, 15 Mar 2013 06:49:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2013/03/15/87066.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/87066.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2013/03/15/87066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/87066.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/87066.html</trackback:ping><description><![CDATA[<div style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" id="content" an="0" tn="8" al="0" c="content mod-cs-content text-content clearfix" imgnum="0" t="div" l="30" ptl="25"><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">gcc的</span><font style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(198,10,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="c1" t="font" l="4" ptl="26">不定参数</font><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">宏</span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">#define debug(x, arg...)&nbsp; printf((x), ##arg)</span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><font style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(198,10,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="c1" t="font" l="0" ptl="40">C99</font><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">的</span><font style="widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(198,10,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="c1" t="font" l="4" ptl="41">不定参数</font><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">宏</span><br style="widows: 2; text-transform: none; text-indent: 0px; font: 13px/16px Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" /><span style="widows: 2; text-transform: none; text-indent: 0px; display: inline !important; font: 13px/16px Simsun; white-space: normal; orphans: 2; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">#define debug(...)&nbsp; printf( __VA_ARGS__)</span></div>  <img src ="http://www.cnitblog.com/schkui/aggbug/87066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2013-03-15 14:49 <a href="http://www.cnitblog.com/schkui/archive/2013/03/15/87066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见排序算法 代码</title><link>http://www.cnitblog.com/schkui/archive/2012/06/20/81563.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Wed, 20 Jun 2012 03:58:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2012/06/20/81563.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/81563.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2012/06/20/81563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/81563.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/81563.html</trackback:ping><description><![CDATA[<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
 
 var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
 
 window.comSogouWwwStop = true;
 
 setTimeout(function(){ 
  if (!document.location || document.location.toString().indexOf(SERVER) != 0){
   return;
  }
  
  function bind(elem, evt, func){
   if (elem){
    return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
   }
  }

  function storeHint() {
   var hint = new Array(); 
   var i = 0; 
   var a = document.getElementById("hint_" + i);
   var b = document.getElementById("hint_text_" + i);
   var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
   while(a && b) {
    bind(a, "click", storeClick);
    hint.push({"text":b.innerHTML, "url":a.href});
    i++;
    a = document.getElementById("hint_" + i);
    b = document.getElementById("hint_text_" + i);
   }
   return hint;
  }
  
  if (document.getElementById("windowcloseit")){   
   document.getElementById("windowcloseit").onclick = function(){
    sogouExplorer.extension.sendRequest({cmd: "closeit"});
   }
   var flag = false;
   document.getElementById("bbconfig").onclick = function(){
    flag = true;
    sogouExplorer.extension.sendRequest({cmd: "config"});
    return false;
   }
   document.body.onclick = function(){
    if (flag) {
     flag = false;
    } else {
     sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
    }
   };/*
   document.getElementById("bbhidden").onclick = function(){
    sogouExplorer.extension.sendRequest({cmd: "hide"});
    return false;
   }  */
   var sogoutip = document.getElementById("sogoutip");
   var tip = {};
   tip.word = sogoutip.innerHTML;
   tip.config = sogoutip.title.split(",");
   var hint = storeHint();
   sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
  }else{
   if (document.getElementById("windowcloseitnow")){
    sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
   }
  }
 }, 1);
 
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>
<p>从大的方面来说，排序可以分成内排序和外排序&#8212;&#8212;内排序是外排序的基础。我们常用的内排序又可以粗略分成下面的类型：</p>
<p>&nbsp;&nbsp;&nbsp; 1.经典算法：如冒泡排序；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;2.插入排序及希尔排序；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;3.选择交换排序；</p>
<p>&nbsp;&nbsp;&nbsp; 4.堆排序；</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;5.归并排序； </p>
<p>&nbsp;&nbsp;&nbsp; 6.快速排序。</p>
<p>别看排序有那么多种类型，但它们都离不开这样的核心思想&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>一个待排序列总是被不断从无序序列转变为有序序<br /><br /></p>
<p><span style="color: red"><strong>一。经典算法：冒泡排序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong></span><span style="color: #000000"><strong>原理 ：</strong></span><span style="color: #000000">在每一遍历中，通过</span><span style="color: red"><u>相邻元素的比较</u> <span style="color: #000000">（&#8220;冒泡&#8221;的比较形象），找到这趟遍历的最小值（或者最大值），并且放到合适的<span style="color: #000000">位置 <br />&nbsp;&nbsp;&nbsp;&nbsp; 时间复杂度 O(n^2)<br /></span></span></p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">//////////////////////////////////////////////////////////////////////////</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">/////</span><span style="color: #000000">&nbsp;冒泡排序<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">typename</span><span style="color: #000000">&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />inline&nbsp;void&nbsp;my_swap(T</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;l&nbsp;,&nbsp;T</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;r)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;l&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">r&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tmp&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">typename</span><span style="color: #000000">&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />void&nbsp;BubbleSort(T&nbsp;Arr[]&nbsp;,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;N)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />{&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;N&nbsp;&nbsp;;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">&nbsp;)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;N</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;;&nbsp;j&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;i&nbsp;;&nbsp;j</span><span style="color: #000000">--</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Arr[j]&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;Arr[j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">])<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my_swap(Arr[j]&nbsp;,&nbsp;Arr[j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">])&nbsp;&nbsp;&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span></div>
<p>&nbsp;</p>
<p></span>&nbsp;</p>
<p><span style="color: red"><strong>二。插入排序：</strong></span></p>
<p><strong></strong><span style="color: #000000"><strong>&nbsp;&nbsp; 原理&nbsp; </strong></span>每一趟处理一个元素，将该元素放于该元素之前的子数组（有序）中的正确位置，共需n-1趟。&nbsp;&nbsp;&nbsp;&nbsp;时间复杂度 O(n^2)<br />&nbsp; &nbsp;(思想来源玩扑克的时候，插牌)<br /><!--StartFragment -->
</p>
<div><img style="width: 207px; height: 181px" alt="" src="file:///C:/Documents%20and%20Settings/Songchengkui/Application%20Data/Tencent/Users/315948789/QQ/WinTemp/RichOle/K%7DPNFNEXL)%7B8%60W6T7OPB8AI.jpg" width="207" height="181" /> </div>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">typename</span><span style="color: #000000">&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />void&nbsp;InsertSort(T&nbsp;Arr[]&nbsp;,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;N)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;;&nbsp;p&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;N&nbsp;;p</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Arr[p]&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(j&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;p&nbsp;;j</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;tmp&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;Arr[j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;;&nbsp;j</span><span style="color: #000000">--</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arr[j]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Arr[j</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arr[j]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;tmp&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span></div>
<p>&nbsp;<br /><strong style="color: red">三 希尔排序</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">//////////////////////////////////////////////////////////////////////////</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">///</span><span style="color: #000000">&nbsp;shell&nbsp;发明者Donald&nbsp;Shell&nbsp;该算法是冲破2次时间障碍的第一批算法，<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">///</span><span style="color: #000000">&nbsp;&nbsp;通过比较一定间隔的元素工作，距离随着算法的进行而减小<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">////</span><span style="color: #000000">&nbsp;直到比较相邻元素最后一趟位置&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">----</span><span style="color: #000000">》&nbsp;也叫缩减增量排序<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">////</span><span style="color: #000000">&nbsp;最坏&nbsp;&#920;(O</span><span style="color: #000000">^</span><span style="color: #000000">2</span><span style="color: #000000">)&nbsp;&nbsp;不同的增量最坏的时间复杂度&nbsp;不一样&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #000000"><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />template</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">typename</span><span style="color: #000000">&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />void&nbsp;ShellSort(T&nbsp;Arr[]&nbsp;,</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;N)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;gap&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;N&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;;&nbsp;gap&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;;&nbsp;gap&nbsp;</span><span style="color: #000000">/=</span><span style="color: #000000">2</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">gap&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;N&nbsp;;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;tmp</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Arr[i]&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;j</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(&nbsp;;&nbsp;j</span><span style="color: #000000">&gt;=</span><span style="color: #000000">&nbsp;gap&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;tmp</span><span style="color: #000000">&lt;</span><span style="color: #000000">Arr[j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">gap]&nbsp;;j&nbsp;</span><span style="color: #000000">-=</span><span style="color: #000000">&nbsp;gap)<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arr[j]&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">Arr[j&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">gap]&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arr[j]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">tmp&nbsp;&nbsp;;<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" />}<br /><img alt="" align="top" src="http://www.cnitblog.com/images/OutliningIndicators/None.gif" /></span></div>
<p>&nbsp;</p>
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_" + i);
			var b = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a && b) {
				bind(a, "click", storeClick);
				hint.push({"text":b.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_" + i);
				b = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script><img src ="http://www.cnitblog.com/schkui/aggbug/81563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2012-06-20 11:58 <a href="http://www.cnitblog.com/schkui/archive/2012/06/20/81563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC++ CreateDIBSection()  StretchDIBits()  SetStretchBltMode() 实用小例子</title><link>http://www.cnitblog.com/schkui/archive/2011/12/26/76857.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 26 Dec 2011 03:15:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2011/12/26/76857.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/76857.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2011/12/26/76857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/76857.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/76857.html</trackback:ping><description><![CDATA[<p>#pragma once</p>
<p>&nbsp;</p>
<p><br />typedef struct _VC_BITMAPINFO {<br />&nbsp;BITMAPINFOHEADER&nbsp;&nbsp;&nbsp; bmiHeader;<br />&nbsp;//union {<br />&nbsp;//&nbsp;VC_RGB565_MASKS&nbsp;&nbsp;rgbMasks;<br />&nbsp;DWORD&nbsp;&nbsp;&nbsp;&nbsp;bwPalette[ 256 ];<br />&nbsp;//};<br />} VC_BITMAPINFO, *PVC_BITMAPINFO;</p>
<p><br />// CIRImageView</p>
<p>class CIRImageView : public CStatic<br />{<br />&nbsp;DECLARE_DYNAMIC(CIRImageView)</p>
<p>public:<br />&nbsp;CIRImageView();<br />&nbsp;virtual ~CIRImageView();</p>
<p>private:<br />&nbsp;HBITMAP&nbsp;&nbsp;&nbsp;hStillBitmap ;<br />&nbsp;PUCHAR&nbsp;&nbsp;&nbsp;pStillImageData;<br />&nbsp;PUCHAR&nbsp;&nbsp;&nbsp;p_tmpMem&nbsp; ;</p>
<p>&nbsp;VC_BITMAPINFO&nbsp;bmiStill&nbsp; ;<br />protected:<br />&nbsp;DECLARE_MESSAGE_MAP()<br />public:</p>
<p>&nbsp;int UpdateIrisImage(BYTE* pData);<br />&nbsp;int ClearIrisImage();<br />&nbsp;afx_msg void OnPaint();<br />&nbsp;int InitBmpStruct(void);</p>
<p><br />};</p>
<p><br />&nbsp;</p>
<p>// IRImageView.cpp : 实现文件<br />//</p>
<p>#include "stdafx.h"<br />#include "IRImageView.h"<br />#include "applib.h"</p>
<p>//////////////////////////////////////////////////////////////////////////</p>
<p>#define ES_RZ_WIDTH 2560<br />#define ES_RZ_HIGH&nbsp; 800</p>
<p>//#define ES_RZ_WIDTH 640<br />//#define ES_RZ_HIGH&nbsp; 480</p>
<p>//////////////////////////////////////////////////////////////////////////<br />// CIRImageView</p>
<p>IMPLEMENT_DYNAMIC(CIRImageView, CStatic)</p>
<p>CIRImageView::CIRImageView()<br />{<br />&nbsp;hStillBitmap =&nbsp; NULL ;<br />&nbsp;p_tmpMem&nbsp; = NULL&nbsp; ;<br />&nbsp;InitBmpStruct() ;<br />}</p>
<p>CIRImageView::~CIRImageView()<br />{<br />&nbsp;if ( hStillBitmap != NULL )<br />&nbsp;{<br />&nbsp;&nbsp;DeleteObject( hStillBitmap );<br />&nbsp;&nbsp;hStillBitmap = NULL;<br />&nbsp;}<br />}</p>
<p><br />BEGIN_MESSAGE_MAP(CIRImageView, CStatic)<br />&nbsp;ON_WM_PAINT()<br />END_MESSAGE_MAP()</p>
<p>// CIRImageView 消息处理程序</p>
<p>&nbsp;</p>
<p><br />int CIRImageView::ClearIrisImage()<br />{<br />&nbsp;memset(pStillImageData , 0 ,&nbsp; ES_RZ_WIDTH * ES_RZ_HIGH ) ;<br />&nbsp;Invalidate(true) ;<br />&nbsp;return 0;<br />}</p>
<p>int CIRImageView::UpdateIrisImage(BYTE* pData)<br />{<br />&nbsp;int ImageHeight = ES_RZ_WIDTH;<br />&nbsp;int ImageWidth = ES_RZ_HIGH;<br />&nbsp;//For test preview update</p>
<p>&nbsp;int j=0 ;&nbsp;<br />&nbsp;for(int iY = (INT32)(ImageHeight - 1); iY &gt;= 0; iY--)<br />&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;for(int iX = 0; iX &lt; ImageWidth; iX++)<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;pStillImageData[( ( ImageHeight -1 - iY ) * ImageWidth) +&nbsp; ( ImageWidth -1 - iX) ] = (UINT8)pData[(iY * ImageWidth) + iX] ;<br />&nbsp;&nbsp;}&nbsp;&nbsp; <br />&nbsp;}</p>
<p>&nbsp;Invalidate(FALSE) ;<br />&nbsp;return 0;<br />}</p>
<p>void CIRImageView::OnPaint()<br />{<br />&nbsp;CPaintDC dc(this); // device context for painting<br />&nbsp;// TODO: 在此处添加消息处理程序代码<br />&nbsp;// 不为绘图消息调用 CStatic::OnPaint()</p>
<p>&nbsp;int&nbsp;&nbsp;&nbsp;imageWidth;<br />&nbsp;int&nbsp;&nbsp;&nbsp;imageHeight;<br />&nbsp;RECT&nbsp;&nbsp;&nbsp; rect ,win ;<br />&nbsp;::GetClientRect(m_hWnd, &amp;rect);</p>
<p>&nbsp;imageWidth = ES_RZ_WIDTH;<br />&nbsp;imageHeight = ES_RZ_HIGH;</p>
<p>&nbsp;int&nbsp;&nbsp; i&nbsp;&nbsp; =&nbsp;&nbsp; SetStretchBltMode(dc.m_hDC,COLORONCOLOR); </p>
<p>&nbsp;StretchDIBits( dc.m_hDC,<br />&nbsp;0,0,rect.right, rect.bottom,<br />&nbsp;0,0,imageWidth, (UINT)imageHeight,<br />&nbsp;pStillImageData,<br />&nbsp;(BITMAPINFO*)&amp;bmiStill,&nbsp; DIB_RGB_COLORS , SRCCOPY<br />&nbsp;); <br />}</p>
<p>int CIRImageView::InitBmpStruct(void)<br />{<br />&nbsp;// create the still dib<br />&nbsp;bmiStill.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );<br />&nbsp;bmiStill.bmiHeader.biWidth = ES_RZ_WIDTH;<br />&nbsp;bmiStill.bmiHeader.biHeight = ES_RZ_HIGH;<br />&nbsp;bmiStill.bmiHeader.biPlanes = 1;<br />&nbsp;bmiStill.bmiHeader.biSizeImage = 0;<br />&nbsp;bmiStill.bmiHeader.biXPelsPerMeter = 0;<br />&nbsp;bmiStill.bmiHeader.biYPelsPerMeter = 0;<br />&nbsp;bmiStill.bmiHeader.biClrUsed = 0;<br />&nbsp;bmiStill.bmiHeader.biClrImportant = 0;&nbsp;</p>
<p>&nbsp;bmiStill.bmiHeader.biBitCount = 8;<br />&nbsp;bmiStill.bmiHeader.biCompression = BI_RGB;</p>
<p>&nbsp;int&nbsp; stillImageSize = ES_RZ_WIDTH&nbsp; * ES_RZ_HIGH;</p>
<p>&nbsp;// initialize the black and white palette<br />&nbsp;for ( int i=0; i &lt; 256; i++ ) {<br />&nbsp;&nbsp;bmiStill.bwPalette[i] = i | ( i &lt;&lt; 8 ) | ( i &lt;&lt; 16 );<br />&nbsp;}</p>
<p>&nbsp;if (NULL == hStillBitmap)<br />&nbsp;{<br />&nbsp;&nbsp;HDC hDc&nbsp; = ::GetDC( m_hWnd );<br />&nbsp;&nbsp;hStillBitmap = CreateDIBSection( hDc, (LPBITMAPINFO) &amp;bmiStill, DIB_RGB_COLORS, (PVOID *) &amp;pStillImageData, NULL, 0 );<br />&nbsp;}<br />&nbsp;<br />&nbsp;return 0;<br />}<br /></p><script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
 
 var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
 
 window.comSogouWwwStop = true;
 
 setTimeout(function(){ 
  if (!document.location || document.location.toString().indexOf(SERVER) != 0){
   return;
  }
  
  function bind(elem, evt, func){
   if (elem){
    return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
   }
  }

  function storeHint() {
   var hint = new Array(); 
   var i = 0; 
   var a = document.getElementById("hint_text_" + i);
   var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
   while(a) {
    bind(a, "click", storeClick);
    hint.push({"text":a.innerHTML, "url":a.href});
    i++;
    a = document.getElementById("hint_text_" + i);
   }
   return hint;
  }
  
  if (document.getElementById("windowcloseit")){   
   document.getElementById("windowcloseit").onclick = function(){
    sogouExplorer.extension.sendRequest({cmd: "closeit"});
   }
   var flag = false;
   document.getElementById("bbconfig").onclick = function(){
    flag = true;
    sogouExplorer.extension.sendRequest({cmd: "config"});
    return false;
   }
   document.body.onclick = function(){
    if (flag) {
     flag = false;
    } else {
     sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
    }
   };/*
   document.getElementById("bbhidden").onclick = function(){
    sogouExplorer.extension.sendRequest({cmd: "hide"});
    return false;
   }  */
   var sogoutip = document.getElementById("sogoutip");
   var tip = {};
   tip.word = sogoutip.innerHTML;
   tip.config = sogoutip.title.split(",");
   var hint = storeHint();
   sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
  }else{
   if (document.getElementById("windowcloseitnow")){
    sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
   }
  }
 }, 1);
 
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script>
<script>setTimeout((function(){
(function(sogouExplorer){
if (sogouExplorer == undefined) return;
sogouExplorer.extension.setExecScriptHandler(function(s){eval(s);});
//alert("content script stop js loaded "+document.location);
if (typeof comSogouWwwStop == "undefined"){
	
	var SERVER = "http://ht.www.sogou.com/websearch/features/yun1.jsp?pid=sogou-brse-596dedf4498e258e&";
	
	window.comSogouWwwStop = true;
	
	setTimeout(function(){ 
		if (!document.location || document.location.toString().indexOf(SERVER) != 0){
			return;
		}
		
		function bind(elem, evt, func){
			if (elem){
				return elem.addEventListener?elem.addEventListener(evt,func,false):elem.attachEvent("on"+evt,func);
			}
		}

		function storeHint() {
			var hint = new Array(); 
			var i = 0; 
			var a = document.getElementById("hint_text_" + i);
			var storeClick = function(){sogouExplorer.extension.sendRequest({cmd: "click"});}
			while(a) {
				bind(a, "click", storeClick);
				hint.push({"text":a.innerHTML, "url":a.href});
				i++;
				a = document.getElementById("hint_text_" + i);
			}
			return hint;
		}
		
		if (document.getElementById("windowcloseit")){			
			document.getElementById("windowcloseit").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "closeit"});
			}
			var flag = false;
			document.getElementById("bbconfig").onclick = function(){
				flag = true;
				sogouExplorer.extension.sendRequest({cmd: "config"});
				return false;
			}
			document.body.onclick = function(){
				if (flag) {
					flag = false;
				} else {
					sogouExplorer.extension.sendRequest({cmd: "closeconfig"});
				}
			};/*
			document.getElementById("bbhidden").onclick = function(){
				sogouExplorer.extension.sendRequest({cmd: "hide"});
				return false;
			}		*/
			var sogoutip = document.getElementById("sogoutip");
			var tip = {};
			tip.word = sogoutip.innerHTML;
			tip.config = sogoutip.title.split(",");
			var hint = storeHint();
			sogouExplorer.extension.sendRequest({cmd: "show", data: {hint:hint,tip:tip}});
		}else{
			if (document.getElementById("windowcloseitnow")){
				sogouExplorer.extension.sendRequest({cmd: "closeit", data: true});
			}
		}
	}, 1);
	
}



})(window.external.sogouExplorer(window,-1709349363));
}), 10);</script><img src ="http://www.cnitblog.com/schkui/aggbug/76857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2011-12-26 11:15 <a href="http://www.cnitblog.com/schkui/archive/2011/12/26/76857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enterprise Architect 8.0.864下载及注册码</title><link>http://www.cnitblog.com/schkui/archive/2011/12/05/76521.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Mon, 05 Dec 2011 03:56:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2011/12/05/76521.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/76521.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2011/12/05/76521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/76521.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/76521.html</trackback:ping><description><![CDATA[<div>{9699EED2-BE87-9ee4-9996-9BAE4-FW71-DAWA-VG5W-4RUQ-C0}</div>
<div>{880300E9-20C2-18c4-A5C0-4D322-FW70-E936-8362-4EQA-C0}</div>
<div>{4B2DEEBC-C889-653a-3158-3545C-FW70-A5CM-UU9K-NGK3-C0}</div>
<div>{27B034BE-E297-d84e-02B5-C05D1-FW71-C70N-QO3O-E0AO-C0}</div>------------------------ 
<div>低版本的也能用，而且，7.0的keygen生成的key也能用在8.0.864上面。</div>
<div><br /></div>
<div><font color="#ff0000"><strong>在官网下载的试用版无法使用这些key</strong></font>，请从下面的链接进行下载。</div>
<div><br /></div>
<div>下载：<a href="http://u.115.com/file/f9f63fb1e5" rel="nofollow" target="_blank"><font color="#294a09">115网盘下载</font></a>&nbsp;</div><wbr>  <img src ="http://www.cnitblog.com/schkui/aggbug/76521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2011-12-05 11:56 <a href="http://www.cnitblog.com/schkui/archive/2011/12/05/76521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大整数相乘算法 </title><link>http://www.cnitblog.com/schkui/archive/2011/11/10/76288.html</link><dc:creator>易道</dc:creator><author>易道</author><pubDate>Thu, 10 Nov 2011 02:13:00 GMT</pubDate><guid>http://www.cnitblog.com/schkui/archive/2011/11/10/76288.html</guid><wfw:comment>http://www.cnitblog.com/schkui/comments/76288.html</wfw:comment><comments>http://www.cnitblog.com/schkui/archive/2011/11/10/76288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/schkui/comments/commentRss/76288.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/schkui/services/trackbacks/76288.html</trackback:ping><description><![CDATA[<p>include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#define N 40<br />#define M 100<br />int res[M];</p>
<p>/*****<br />* Function: 大整数相乘算法<br />* 参数：<br />*&nbsp; a: 乘数,字符串，一个字符代表整数的一位，左侧是最高位，右侧是最低位<br />*&nbsp; b: 乘数，同上<br />*&nbsp; n: a的长度<br />*&nbsp; m: b的长度<br />* 没有返回值，结果直接放到全局变量res数组中，如果不想要全局变量，也可以在函数中多加一个参数，保存结果。<br />&nbsp; res中每一位存放相乘结果的各个位，跟输入不同，右侧放的是高位，即高位的对应的数组索引也是高的。<br />*****/</p>
<p>void Multiply(char *a,char *b,int n,int m)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 大整数相乘<br />{<br />&nbsp;int i,j,temp,t,tt;<br />&nbsp;int num=0;<br />&nbsp;memset(res,0,sizeof(res));<br />&nbsp;for(i=0;i&lt;m;i++)<br />&nbsp;{<br />&nbsp;&nbsp;temp=0;<br />&nbsp;&nbsp;for(j=0;j&lt;n;j++)<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;t=(a[n-1-j]-'0')*(b[m-1-i]-'0')+temp;//从最低位开始计算<br />&nbsp;&nbsp;&nbsp;if(0 == t)&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;num = j+i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;tt = res[num]+(t);&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;res[num] = tt%10;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;temp = tt/10;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;if( temp &gt; 0 )<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;res[++num] += temp;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;for(i=num;i&gt;=0;i--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 输出结果<br />&nbsp;&nbsp;printf("%d",res[i]);<br />&nbsp;printf("\n");<br />}<br /></p><img src ="http://www.cnitblog.com/schkui/aggbug/76288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/schkui/" target="_blank">易道</a> 2011-11-10 10:13 <a href="http://www.cnitblog.com/schkui/archive/2011/11/10/76288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>