﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-powerwater-文章分类-C++</title><link>http://www.cppblog.com/powerwater/category/17952.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 19 Mar 2019 03:25:20 GMT</lastBuildDate><pubDate>Tue, 19 Mar 2019 03:25:20 GMT</pubDate><ttl>60</ttl><item><title>字符串流的用法</title><link>http://www.cppblog.com/powerwater/articles/215376.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Tue, 28 Nov 2017 03:13:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/215376.html</guid><description><![CDATA[istringstream:


#include<iostream>

#include<sstream>

#include<string>
#include<cstring>
using namespace std;

int main(){
	istringstream is("100 200"); //初始化字符串流 
	int a,b;
	is>>a>>b;
	cout<<a+b<<endl;
	
	string s("10 20");
	is.str("");	//清空字符串流
	is.clear() ;//清空标记
	is.str(s);  //字符串赋值给字符串流 
	is>>a>>b;
	cout<<a+b<<endl;
	return 0;
}

ostringstream:
#include<iostream>
#include<sstream>
#include<string>
#include<cstring>
using namespace std;

int main(){
	ostringstream os;
	os<<"ABC"<<100+200;	
	cout<<os.str()<<endl;  //输出ABC300 
	
	os.str("ok");	 //更新输出字符串
	cout<<os.str()<<endl; //输出ok 
	
	os<<"good"<<endl;	
	cout<<os.str()<<endl; /输出good 
	 
	return 0;
}  
 <img src ="http://www.cppblog.com/powerwater/aggbug/215376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2017-11-28 11:13 <a href="http://www.cppblog.com/powerwater/articles/215376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>输入输出运算符重载</title><link>http://www.cppblog.com/powerwater/articles/212471.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Sat, 12 Dec 2015 08:38:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/212471.html</guid><description><![CDATA[<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"><img id="Code_Closed_Image_163652" onclick="this.style.display='none'; Code_Closed_Text_163652.style.display='none'; Code_Open_Image_163652.style.display='inline'; Code_Open_Text_163652.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"><img style="display: none" id="Code_Open_Image_163652" onclick="this.style.display='none'; Code_Open_Text_163652.style.display='none'; Code_Closed_Image_163652.style.display='inline'; Code_Closed_Text_163652.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Code_Closed_Text_163652"></span><span style="display: none" id="Code_Open_Text_163652"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">iostream</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;std;<br /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;stu{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;chi,mat,eng,total;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;istream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">(istream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">,stu</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;ostream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">(ostream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">,stu</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cal(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;total</span><span style="color: #000000">=</span><span style="color: #000000">chi</span><span style="color: #000000">+</span><span style="color: #000000">mat</span><span style="color: #000000">+</span><span style="color: #000000">eng;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />istream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">(istream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">,stu</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">s.name</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">s.chi</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">s.mat</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">s.eng;<br />}&nbsp;<br />ostream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">(ostream</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">,stu</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">out</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s.name</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s.chi</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s.mat</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s.eng</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s.total;<br />}<br />stu&nbsp;s[</span><span style="color: #000000">1000</span><span style="color: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">n;<br />&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">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">n;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">s[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[i].cal();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&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">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">n;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;cout</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">s[i]</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">endl;<br />&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 />}</span></span></div><br />测试数据：<br />5<br />Rose 110 120 125<br />Mike 130 140 115<br />Jack 127 136 142<br />Smith 118 136 135<br />Kitty 100 123 132<br /><br /><img src ="http://www.cppblog.com/powerwater/aggbug/212471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2015-12-12 16:38 <a href="http://www.cppblog.com/powerwater/articles/212471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改ip地址命令及DNS</title><link>http://www.cppblog.com/powerwater/articles/207453.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Sun, 29 Jun 2014 04:09:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/207453.html</guid><description><![CDATA[<div><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 14pt;">用DOS命令</span><strong style="font-size: 14pt;">设置ip地址及DNS</strong></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><strong style="color: red; font-size: 18pt;">设置/修改IP地址，子网掩码，网关的格式：</strong></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">netsh interface ip set address "本地连接" static 10.25.35.35 255.255.255.0 10.25.35.7 auto</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">命令的意思是将&#8220;本地连接&#8221;</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">ip地址设置成 10.25.35.35</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">子网掩码是 255.255.255.0</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">网关设置成 10.25.35.7 并且自动跃点数</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">注意："本地连接"处请根据自己的情况修改</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><strong style="color: red; font-size: 18pt;">设置DNS命令格式</strong><span style="color: red; font-size: 18pt;">：</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">netsh interface ip set dns "本地连接" static 211.138.91.1</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">命令的意思是将&#8220;本地连接&#8221;的DNS设置成211.138.91.1</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><strong style="color: red; font-size: 18pt;">删除IP地址和DNS的命令是</strong></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">netsh interface ip set address "本地连接" dhcp</span></div></div></span></pre><pre><span style="font-size: 18pt;"><div><div><span style="font-size: 18pt;">netsh interface ip set dns "本地连接" dhcp </span></div></div></span></pre><span style="font-size: 18pt;"><br /></span><span style="font-size: 18pt;"></span></div><img src ="http://www.cppblog.com/powerwater/aggbug/207453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-06-29 12:09 <a href="http://www.cppblog.com/powerwater/articles/207453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++获取网卡MAC地址  </title><link>http://www.cppblog.com/powerwater/articles/206636.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Fri, 18 Apr 2014 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/206636.html</guid><wfw:comment>http://www.cppblog.com/powerwater/comments/206636.html</wfw:comment><comments>http://www.cppblog.com/powerwater/articles/206636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/powerwater/comments/commentRss/206636.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/powerwater/services/trackbacks/206636.html</trackback:ping><description><![CDATA[<div><div> 	      <div> 	      	<div> 		      <h3>c++获取网卡MAC地址&nbsp;&nbsp;</h3> 		      <p clearfix="" nbw-act=""  fc06"="" style="line-height:20px;"> 		        <span> 		           		          2011-06-02 14:29:07|&nbsp;&nbsp;分类： 		          <a m2a"="" href="http://woshiyouyouchen.blog.163.com/blog/#m=0&amp;t=1&amp;c=fks_087070085095080074081084087095085086082074093094095071" title="C++">C++</a> 		           		        </span> 		        <span fc07=""  ztag"="">|<span id="$_spanReport"  m2a"="">举报</span></span> 		        <span fc07=""  ztag"="">|<span fc03"="" id="$_fontswitch">字号</span></span><span pnt=""  fc03"="" id="$_blog_subscribe">&nbsp;<a>订阅</a></span> 		      </p> 		    </div> 	      </div>         </div>          <div>         <div cited"="">本文转载自梦想之鹰<a m2a"="" target="_blank" href="http://blog.163.com/huangdekai1/blog/static/30571416201072341316650">《c++获取网卡MAC地址》</a></div>         </div>                   <div fc05="" fc11="" nbw-blog=""  ztag"="">  <div id="blog_text">  <p>参考网址：<br />http://topic.csdn.net/t/20021206/13/1237201.html<br /><br />第 一种方法使用Microsoft的Netbios API。  这是一套通过Winsock提供底层网络支持的命令。使用Netbios的最大缺点是您必须在系统中安装了Netbios服务(如果您在windows网  络中启用了文件共享的话，这就不是问题了)。除此此外，这种方法又快又准确。</p>  <p><br />Netbios API只包括了一个函数，就叫做Netbios。这个函数使用网络控制块(network control block)结构作为参数，这个结构告诉函数要做什么。结构的定义如下： <br />typedef struct _NCB { <br />UCHAR ncb_command; <br />UCHAR ncb_retcode; <br />UCHAR ncb_lsn; <br />UCHAR ncb_num; <br />PUCHAR ncb_buffer; <br />WORD ncb_length; <br />UCHAR ncb_callname[NCBNAMSZ]; <br />UCHAR ncb_name[NCBNAMSZ]; <br />UCHAR ncb_rto; <br />UCHAR ncb_sto; <br />void (CALLBACK *ncb_post) (struct _NCB *); <br />UCHAR ncb_lana_num; <br />UCHAR ncb_cmd_cplt; <br />#ifdef _WIN64 <br />UCHAR ncb_reserve[18]; <br />#else <br />UCHAR ncb_reserve[10]; <br />#endif <br />HANDLE ncb_event; <br />} NCB, *PNCB; <br /><br /><br /><br />重点在于ncb_command 成员。这个成员告诉Netbios该作什么。我们使用三个命令来探测MAC地址。他们在MSDN的定义如下： <br />命令描述： <br />NCBENUM Windows NT/2000: 列举系统中网卡的数量。使用此命令后，ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区。 <br />NCBENUM 不是标准的 NetBIOS 3.0 命令。 <br /><br />NCBRESET 重置网卡。网卡在接受新的NCB命令之前必须重置。 <br />NCBASTAT 接受本地或远程接口卡的状态。使用此命令后，ncb_buffer成员指向由ADAPTER_STATUS结构填充的缓冲区，随后是NAME_BUFFER结构的数组。 <br /><br />下面就是取得您系统MAC地址的步骤： <br />1》列举所有的接口卡。 <br />2》重置每块卡以取得它的正确信息。 <br />3》查询接口卡，取得MAC地址并生成标准的冒号分隔格式。 <br /><br />下面就是实例源程序。 <br />netbios.cpp <br /><br />#include &lt;windows.h&gt; <br />#include &lt;stdlib.h&gt; <br />#include &lt;stdio.h&gt; <br />#include &lt;iostream&gt; <br />#include &lt;string&gt; <br /><br />using namespace std; <br />#define bzero(thing,sz) memset(thing,0,sz) <br /><br />bool GetAdapterInfo(int adapter_num, string &amp;mac_addr) <br />{ <br />// 重置网卡，以便我们可以查询 <br />NCB Ncb; <br />memset(&amp;Ncb, 0, sizeof(Ncb)); <br />Ncb.ncb_command = NCBRESET; <br />Ncb.ncb_lana_num = adapter_num; <br />if (Netbios(&amp;Ncb) != NRC_GOODRET) { <br />mac_addr = "bad (NCBRESET): "; <br />mac_addr += string(Ncb.ncb_retcode); <br />return false; <br />} <br /><br />// 准备取得接口卡的状态块 <br />bzero(&amp;Ncb,sizeof(Ncb); <br />Ncb.ncb_command = NCBASTAT; <br />Ncb.ncb_lana_num = adapter_num; <br />strcpy((char *) Ncb.ncb_callname, "*"); <br />struct ASTAT <br />{ <br />ADAPTER_STATUS adapt; <br />NAME_BUFFER NameBuff[30]; <br />} Adapter; <br />bzero(&amp;Adapter,sizeof(Adapter)); <br />Ncb.ncb_buffer = (unsigned char *)&amp;Adapter; <br />Ncb.ncb_length = sizeof(Adapter); <br /><br />// 取得网卡的信息，并且如果网卡正常工作的话，返回标准的冒号分隔格式。 <br />if (Netbios(&amp;Ncb) == 0) <br />{ <br />char acMAC[18]; <br />sprintf(acMAC, "%02X:%02X:%02X:%02X:%02X:%02X", <br />int (Adapter.adapt.adapter_address[0]), <br />int (Adapter.adapt.adapter_address[1]), <br />int (Adapter.adapt.adapter_address[2]), <br />int (Adapter.adapt.adapter_address[3]), <br />int (Adapter.adapt.adapter_address[4]), <br />int (Adapter.adapt.adapter_address[5])); <br />mac_addr = acMAC; <br />return true; <br />} <br />else <br />{ <br />mac_addr = "bad (NCBASTAT): "; <br />mac_addr += string(Ncb.ncb_retcode); <br />return false; <br />} <br />} <br /><br />int main() <br />{ <br />// 取得网卡列表 <br />LANA_ENUM AdapterList; <br />NCB Ncb; <br />memset(&amp;Ncb, 0, sizeof(NCB)); <br />Ncb.ncb_command = NCBENUM; <br />Ncb.ncb_buffer = (unsigned char *)&amp;AdapterList; <br />Ncb.ncb_length = sizeof(AdapterList); <br />Netbios(&amp;Ncb); <br /><br />// 取得本地以太网卡的地址 <br />string mac_addr; <br />for (int i = 0; i &lt; AdapterList.length - 1; ++i) <br />{ <br />if (GetAdapterInfo(AdapterList.lana[i], mac_addr)) <br />{ <br />cout &lt;&lt; "Adapter " &lt;&lt; int (AdapterList.lana[i]) &lt;&lt; <br />"'s MAC is " &lt;&lt; mac_addr &lt;&lt; endl; <br />} <br />else <br />{ <br />cerr &lt;&lt; "Failed to get MAC address! Do you" &lt;&lt; endl; <br />cerr &lt;&lt; "have the NetBIOS protocol installed?" &lt;&lt; endl; <br />break; <br />} <br />} <br /><br />return 0; <br />} <br /><br /><br />file://---------------------------------------------------------------------------/ <br /><br /><br />第二种方法－使用COM GUID API <br />这种方法使用COM API创建一个GUID(全局唯一标识符)并从那里继承MAC地址。GUID通常用来标识COM组件以及系统中的其他对象。它们是由MAC地址(结合其他 东西)计算得来的，表面上MAC地址就包含在其中。我说表面上是因为事实上并没有包含。 <br />我提供这种方法更多的是为了作为反面教材。您也许用这种方法能够得到MAC地址，但有时候您只会得到随机的十六进制数值。 <br />下面的例子十分简单，无需多讲。我们使用CoCreateGuid创建GUID，并将最后六个字节放入字符串中。它们可能是MAC地址，但并不是必然的。 <br /><br />uuid.cpp <br />#include &lt;windows.h&gt; <br />#include &lt;iostream&gt; <br />#include &lt;conio.h&gt; <br /><br />using namespace std; <br /><br />int main() <br />{ <br />cout &lt;&lt; "MAC address is: "; <br /><br />// 向COM要求一个UUID。如果机器中有以太网卡， <br />// UUID最后的六个字节(Data4的2－7字节)应该是本地以太网卡的MAC地址。 <br />GUID uuid; <br />CoCreateGuid(&amp;uuid); <br />// Spit the address out <br />char mac_addr[18]; <br />sprintf(mac_addr,"%02X:%02X:%02X:%02X:%02X:%02X", <br />uuid.Data4[2],uuid.Data4[3],uuid.Data4[4], <br />uuid.Data4[5],uuid.Data4[6],uuid.Data4[7]); <br />cout &lt;&lt; mac_addr &lt;&lt; endl; <br />getch(); <br />return 0; <br />} <br /><a rel="nofollow" href="http://topic.csdn.net/t/20021206/13/1237201.html#"><br /></a></p>  <p>第三种方法－ 使用SNMP扩展API <br />我要讨论的第三种方法是使用Windows的SNMP(简单网络管理协议)扩展来取得MAC地址。在我的经验里，这个协议很简单。代码也是直勾勾的向前的。基本步骤和Netbios相同： <br />1》取得网卡列表 <br />2》查询每块卡的类型和MAC地址 <br />3》保存当前网卡 <br />我个人对SNMP了解不多，但如我刚刚所言，代码十分清楚。 <br /><br />snmp.cpp <br />#include &lt;snmp.h&gt; <br />#include &lt;conio.h&gt; <br />#include &lt;stdio.h&gt; <br /><br />typedef bool(WINAPI * pSnmpExtensionInit) ( <br />IN DWORD dwTimeZeroReference, <br />OUT HANDLE * hPollForTrapEvent, <br />OUT AsnObjectIdentifier * supportedView); <br /><br />typedef bool(WINAPI * pSnmpExtensionTrap) ( <br />OUT AsnObjectIdentifier * enterprise, <br />OUT AsnInteger * genericTrap, <br />OUT AsnInteger * specificTrap, <br />OUT AsnTimeticks * timeStamp, <br />OUT RFC1157VarBindList * variableBindings); <br /><br />typedef bool(WINAPI * pSnmpExtensionQuery) ( <br />IN BYTE requestType, <br />IN OUT RFC1157VarBindList * variableBindings, <br />OUT AsnInteger * errorStatus, <br />OUT AsnInteger * errorIndex); <br /><br />typedef bool(WINAPI * pSnmpExtensionInitEx) ( <br />OUT AsnObjectIdentifier * supportedView); <br /><br />void main() <br />{ <br />HINSTANCE m_hInst; <br />pSnmpExtensionInit m_Init; <br />pSnmpExtensionInitEx m_InitEx; <br />pSnmpExtensionQuery m_Query; <br />pSnmpExtensionTrap m_Trap; <br />HANDLE PollForTrapEvent; <br />AsnObjectIdentifier SupportedView; <br />UINT OID_ifEntryType[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 3}; <br />UINT OID_ifEntryNum[] = {1, 3, 6, 1, 2, 1, 2, 1}; <br />UINT OID_ipMACEntAddr[] = {1, 3, 6, 1, 2, 1, 2, 2, 1, 6}; <br />AsnObjectIdentifier MIB_ifMACEntAddr = <br />{ sizeof(OID_ipMACEntAddr) sizeof(UINT), OID_ipMACEntAddr }; <br />AsnObjectIdentifier MIB_ifEntryType = <br />{sizeof(OID_ifEntryType) sizeof(UINT), OID_ifEntryType}; <br />AsnObjectIdentifier MIB_ifEntryNum = <br />{sizeof(OID_ifEntryNum) sizeof(UINT), OID_ifEntryNum}; <br />RFC1157VarBindList varBindList; <br />RFC1157VarBind varBind[2]; <br />AsnInteger errorStatus; <br />AsnInteger errorIndex; <br />AsnObjectIdentifier MIB_NULL = {0, 0}; <br />int ret; <br />int dtmp; <br />int i = 0, j = 0; <br />bool found = false; <br />char TempEthernet[13]; <br />m_Init = NULL; <br />m_InitEx = NULL; <br />m_Query = NULL; <br />m_Trap = NULL; <br /><br />/* 载入SNMP DLL并取得实例句柄 */ <br />m_hInst = LoadLibrary("inetmib1.dll"); <br />if (m_hInst &lt; (HINSTANCE) HINSTANCE_ERROR) <br />{ <br />m_hInst = NULL; <br />return; <br />} <br />m_Init = <br />(pSnmpExtensionInit) GetProcAddress(m_hInst, "SnmpExtensionInit"); <br />m_InitEx = <br />(pSnmpExtensionInitEx) GetProcAddress(m_hInst, <br />"SnmpExtensionInitEx"); <br />m_Query = <br />(pSnmpExtensionQuery) GetProcAddress(m_hInst, <br />"SnmpExtensionQuery"); <br />m_Trap = <br />(pSnmpExtensionTrap) GetProcAddress(m_hInst, "SnmpExtensionTrap"); <br />m_Init(GetTickCount(), &amp;PollForTrapEvent, &amp;SupportedView); <br /><br />/* 初始化用来接收m_Query查询结果的变量列表 */ <br />varBindList.list = varBind; <br />varBind[0].name = MIB_NULL; <br />varBind[1].name = MIB_NULL; <br /><br />/* 在OID中拷贝并查找接口表中的入口数量 */ <br />varBindList.len = 1; /* Only retrieving one item */ <br />SNMP_oidcpy(&amp;varBind[0].name, &amp;MIB_ifEntryNum); <br />ret = <br />m_Query(ASN_RFC1157_GETNEXTREQUEST, &amp;varBindList, &amp;errorStatus, <br />&amp;errorIndex); <br />printf("# of adapters in this system : %in", <br />varBind[0].value.asnValue.number); <br />varBindList.len = 2; <br /><br />/* 拷贝OID的ifType－接口类型 */ <br />SNMP_oidcpy(&amp;varBind[0].name, &amp;MIB_ifEntryType); <br /><br />/* 拷贝OID的ifPhysAddress－物理地址 */ <br />SNMP_oidcpy(&amp;varBind[1].name, &amp;MIB_ifMACEntAddr); <br /><br />do <br />{ <br /><br />/* 提交查询，结果将载入 varBindList。 <br />可以预料这个循环调用的次数和系统中的接口卡数量相等 */ <br />ret = <br />m_Query(ASN_RFC1157_GETNEXTREQUEST, &amp;varBindList, &amp;errorStatus, <br />&amp;errorIndex); <br />if (!ret) <br />ret = 1; <br />else <br />/* 确认正确的返回类型 */ <br />ret = <br />SNMP_oidncmp(&amp;varBind[0].name, &amp;MIB_ifEntryType, <br />MIB_ifEntryType.idLength); if (!ret) { <br />j++; <br />dtmp = varBind[0].value.asnValue.number; <br />printf("Interface #%i type : %in", j, dtmp); <br /><br />/* Type 6 describes ethernet interfaces */ <br />if (dtmp == 6) <br />{ <br /><br />/* 确认我们已经在此取得地址 */ <br />ret = <br />SNMP_oidncmp(&amp;varBind[1].name, &amp;MIB_ifMACEntAddr, <br />MIB_ifMACEntAddr.idLength); <br />if ((!ret) &amp;&amp; (varBind[1].value.asnValue.address.stream != NULL)) <br />{ <br />if((varBind[1].value.asnValue.address.stream[0] == 0x44) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[1] == 0x45) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[2] == 0x53) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[3] == 0x54) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[4] == 0x00)) <br />{ <br />/* 忽略所有的拨号网络接口卡 */ <br />printf("Interface #%i is a DUN adaptern", j); <br />continue; <br />} <br />if ((varBind[1].value.asnValue.address.stream[0] == 0x00) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[1] == 0x00) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[2] == 0x00) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[3] == 0x00) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[4] == 0x00) <br />&amp;&amp; (varBind[1].value.asnValue.address.stream[5] == 0x00)) <br />{ <br />/* 忽略由其他的网络接口卡返回的NULL地址 */ <br />printf("Interface #%i is a NULL addressn", j); <br />continue; <br />} <br />sprintf(TempEthernet, "%02x%02x%02x%02x%02x%02x", <br />varBind[1].value.asnValue.address.stream[0], <br />varBind[1].value.asnValue.address.stream[1], <br />varBind[1].value.asnValue.address.stream[2], <br />varBind[1].value.asnValue.address.stream[3], <br />varBind[1].value.asnValue.address.stream[4], <br />varBind[1].value.asnValue.address.stream[5]); <br />printf("MAC Address of interface #%i: %sn", j, <br />TempEthernet);} <br />} <br />} <br />} while (!ret); /* 发生错误终止。 */ <br />getch(); <br /><br />FreeLibrary(m_hInst); <br />/* 解除绑定 */ <br />SNMP_FreeVarBind(&amp;varBind[0]); <br />SNMP_FreeVarBind(&amp;varBind[1]); <br />} <br /><br />-------------------------------- <br />NO.4 <br />int ip = 0; //here <br />unsigned char mac[6]; <br />DWORD error = 0; <br />ULONG dwSize = 6; <br />m_szRemoteIP.GetWindowText(m_szremoteip); <br />ip = inet_addr(m_szremoteip); <br />error = SendARP(ip,0,(PULONG)&amp;mac,&amp;dwSize); <br />if (error == NO_ERROR ) <br />{ <br />// printf( "MacAddress: " ); <br />// printf( "%d\n", mac ); <br />m_szRemoteMAC.Format("%02X-%02X-%02X-%02X-%02X-%02X",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);//here <br />} <br />else <br />// printf( "SendARP Error:%d\n", GetLastError()); <br />return; <br />m_remotemac.SetWindowText(m_szRemoteMAC);</p></div></div></div><img src ="http://www.cppblog.com/powerwater/aggbug/206636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-04-18 21:36 <a href="http://www.cppblog.com/powerwater/articles/206636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查找文件的类 struct _finddata_t结构体用法</title><link>http://www.cppblog.com/powerwater/articles/206630.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Fri, 18 Apr 2014 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/206630.html</guid><wfw:comment>http://www.cppblog.com/powerwater/comments/206630.html</wfw:comment><comments>http://www.cppblog.com/powerwater/articles/206630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/powerwater/comments/commentRss/206630.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/powerwater/services/trackbacks/206630.html</trackback:ping><description><![CDATA[<div><p>到底如何查找文件呢？我们需要一个结构体和几个大家可能不太熟悉的函数。这些函数和结构体在的头文件中，结构体为struct _finddata_t ，函数为_findfirst、_findnext和_fineclose。具体如何使用，我会慢慢讲来～</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先讲这个结构体吧～ struct _finddata_t ，这个结构体是用来存储文件各种信息的。说实话，这个结构体的具体定义代码，我没有找到，不过还好，文档里面在_find里有比较详细的成员变量介绍。我基本上就把文档翻译过来讲吧：</p> <p><strong>unsigned atrrib：</strong> 文件属性的存储位置。它存储一个unsigned单元，用于表示文件的属性。文件属性是用位表示的，主要有以下一些：_A_ARCH（存档）、  _A_HIDDEN（隐藏）、_A_NORMAL（正常）、_A_RDONLY（只读）、_A_SUBDIR（文件夹）、_A_SYSTEM（系统）。这 些都是在中定义的宏，可以直接使用，而本身的意义其实是一个无符号整型（只不过这个整型应该是2的几次幂，从而保证只有一位为  1，而其他位为0）。既然是位表示，那么当一个文件有多个属性时，它往往是通过位或的方式，来得到几个属性的综合。例如只读+隐藏+系统属性，应该 为：_A_HIDDEN | _A_RDONLY | _A_SYSTEM 。</p> <p><strong>time_t time_create：</strong> 这里的time_t是一个变量类型（长整型？相当于long int?），用来存储时间的，我们暂时不用理它，只要知道，这个time_create变量是用来存储文件创建时间的就可以了。</p> <p><strong>time_t time_access：</strong> 文件最后一次被访问的时间。</p> <p><strong>time_t time_write：</strong> 文件最后一次被修改的时间。</p> <p><strong>_fsize_t size：</strong> 文件的大小。这里的_fsize_t应该可以相当于unsigned整型，表示文件的字节数。</p> <p><strong>char name</strong> [<strong>_MAX_FNAME</strong> ]：文件的文件名。这里的_MAX_FNAME是一个常量宏，它在头文件中被定义，表示的是文件名的最大长度。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以此，我们可以推测出，struct _finddata_t ，大概的定义如下：</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct _finddata_t   <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned attrib;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time_t time_create;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time_t time_access;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time_t time_write;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _fsize_t size;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char name[_MAX_FNAME];    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面也说了，这个结构体是用来存储文件信息的，那么如何把一个硬盘文件的文件信息&#8220;存到&#8221;这个结构体所表示的内存空间里去呢？这就要靠_findfirst、_findnext和_fineclose三个函数的搭配使用了。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先还是对这三个函数一一介绍一番吧&#8230;&#8230;</p> <p><strong>long _findfirst( char *filespec, struct _finddata_t *fileinfo )；</strong> </p> <p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回值：</strong> 如果查找成功的话，将返回一个long型的唯一的查找用的句柄（就是一个唯一编号）。这个句柄将在_findnext函数中被使用。若失败，则返回-1。</p> <p><strong>参数：</strong> </p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filespec：标明文件的字符串，可支持通配符。比如：*.c，则表示当前文件夹下的所有后缀为C的文件。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileinfo ：这里就是用来存放文件信息的结构体的指针。这个结构体必须在调用此函数前声明，不过不用初始化，只要分配了内存空间就可以了。函数成功后，函数会把找到的文件的信息放入这个结构体中。</p> <p><strong>int _findnext( long handle, struct _finddata_t *fileinfo );</strong> </p> <p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回值：</strong> 若成功返回0，否则返回-1。</p> <p><strong>参数：</strong> </p> <p><strong></strong> handle：即由_findfirst函数返回回来的句柄。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fileinfo：文件信息结构体的指针。找到文件后，函数将该文件信息放入此结构体中。</p> <p><strong>int _findclose( long handle );</strong> </p> <p><strong>返回值：</strong> 成功返回0，失败返回-1。</p> <p><strong>参数：</strong> </p> <p><strong></strong> handle ：_findfirst函数返回回来的句柄。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  大家看到这里，估计都能猜到个大概了吧？先用_findfirst查找第一个文件，若成功则用返回的句柄调用_findnext函数查找其他的文件，当查 找完毕后用，用_findclose函数结束查找。恩，对，这就是正确思路。下面我们就按照这样的思路来编写一个查找C:/WINDOWS文件夹下的所有  exe可执行文件的程序。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include </p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const char *to_search="C://WINDOWS//*.exe";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //欲查找的文件，支持通配符</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int main()   <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long handle;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用于查找的句柄    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct _finddata_t fileinfo;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handle=_findfirst(to_search,&amp;fileinfo);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第一次查找    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(-1==handle)return -1;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s/n",fileinfo.name);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(!_findnext(handle,&amp;fileinfo))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //循环查找其他符合的文件，知道找不到其他的为止    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%s/n",fileinfo.name);    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _findclose(handle);&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //别忘了关闭句柄    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; system("pause");    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;    <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然，这个文件的查找是在指定的路径中进行，如何遍历硬盘，在整个硬盘中查找文件呢？大家可以在网络上搜索文件递归遍历等方法，这里不再做进一步介绍。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  细心的朋友可能会注意到我在程序的末尾用了一个system函数。这个与程序本身并没有影响，和以前介绍给大家的使用getchar()函数的作用相同， 只是为了暂停一下，让我们能看到命令提示符上输出的结果而已。不过system函数本身是一个非常强大的函数。大家可以查查MSDN看看～  简单来说，它是一个C语言与操作系统的相互平台，可以在程序里通过这个函数，向操作系统传递command命令。这个简单的函数会在下一篇的文章中大放异 彩，大家拭目以待吧～～</p><p><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_151131" onclick="this.style.display='none'; Code_Closed_Text_151131.style.display='none'; Code_Open_Image_151131.style.display='inline'; Code_Open_Text_151131.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_151131" style="display: none" onclick="this.style.display='none'; Code_Open_Text_151131.style.display='none'; Code_Closed_Image_151131.style.display='inline'; Code_Closed_Text_151131.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_151131" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"></span><span id="Code_Open_Text_151131" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">io.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">windows.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sRoot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">f:\\src\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sSuffix&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\*.*</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;后缀</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Move(</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sPath);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Move(sRoot);<br />&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pause</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&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 />}<br /></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Move(</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sPath)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;_finddata_t&nbsp;file;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;hFile,&nbsp;hFileNext;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sPathLast&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sPath&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;sSuffix;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;sPathLast&nbsp;=&nbsp;"c:\test\*.*"</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;hFile&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_findfirst(sPathLast.c_str(),&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">file);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(hFile&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">文件不存在.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">file&nbsp;.&nbsp;name</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;hFileNext&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_findnext(hFile,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">file);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(_findnext(hFile,&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">file)&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(file.attrib&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;_A_SUBDIR)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;file&nbsp;.&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">目录：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">sAddPath</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Move(sAddPath);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sAddPath&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;file&nbsp;.&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">文件：</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">sAddPath</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></span></div><p><br /></p></div><img src ="http://www.cppblog.com/powerwater/aggbug/206630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-04-18 15:03 <a href="http://www.cppblog.com/powerwater/articles/206630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取计算机名称和IP地址</title><link>http://www.cppblog.com/powerwater/articles/206605.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Wed, 16 Apr 2014 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/206605.html</guid><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#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 />#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fstream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br />#include&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">winsock2.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />#pragma&nbsp;comment(lib,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ws2_32.lib</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />ofstream&nbsp;fout(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">info.cpp</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">初始化:如果不初始化，以下代码将无法执行</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">WSAData&nbsp;data;<br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(WSAStartup(MAKEWORD(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">1</span><span style="color: #000000; ">),</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">data)</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">初始化错误,无法获取主机信息<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl&nbsp;;<br />}<br />&nbsp;<br /></span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">&nbsp;host[</span><span style="color: #000000; ">255</span><span style="color: #000000; ">];<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">获取主机名:也可以使用GetComputerName()这个函数</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(gethostname(host,</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(host))</span><span style="color: #000000; ">==</span><span style="color: #000000; ">SOCKET_ERROR)<br />{<br />&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">无法获取主机名<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />}<br /></span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />{<br />&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">本机计算机名为:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">host</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;fout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">本机计算机名为:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">host</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />}<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">获取计算机IP:gethostbyname也需要初始化(上面已初始化)</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;hostent&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p</span><span style="color: #000000; ">=</span><span style="color: #000000; ">gethostbyname(host);<br /></span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br />{<br />&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">无法获取计算机主机名及IP<img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />}<br /></span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">获取本机计算机名<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">cout&lt;&lt;"本机计算机名为:"&lt;&lt;p-&gt;h_name&lt;&lt;endl;<br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">本机IP:利用循环,输出本机所有IP</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&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</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">h_addr_list[i]</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;in_addr&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(</span><span style="color: #000000; ">&amp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">,p</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">h_addr_list[i],</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;in_addr));<br />&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">第</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">块网卡的IP为:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">inet_ntoa(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;fout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">第</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">块网卡的IP为:&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">inet_ntoa(</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">)</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&nbsp;&nbsp;&nbsp;}<br /><br />}<br />WSACleanup();<br />cin.</span><span style="color: #0000FF; ">get</span><span style="color: #000000; ">();<br /></span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><img src ="http://www.cppblog.com/powerwater/aggbug/206605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-04-16 15:29 <a href="http://www.cppblog.com/powerwater/articles/206605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux和windows的换行问题</title><link>http://www.cppblog.com/powerwater/articles/206311.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Mon, 24 Mar 2014 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/206311.html</guid><description><![CDATA[<div><div fc05="" fc11="" nbw-blog=""  ztag"=""><div><span style="font-size: 14pt;">　　用getline获取文件中单行中的内容时，如果使用缺省的结束字符，注意最后的换行符.<br />　　在linux下，getline函数缺省的&#8220;结束字符&#8221;是"0A"，也就是换行符。</span></div> <div><span style="font-size: 14pt;">　　而在windows下，getline函数缺省的&#8220;结束字符&#8221;是"0D0A"，也就是回车换行符。<br />　　因此，在linux中用getline读入windows产生的数据时，会比在windows中多一个字符，即回车符"0D"<br /><br /><div><p><strong>回车符号和换行符号产生背景</strong></p> <p>关于&#8220;回车&#8221;（carriage return）和&#8220;换行&#8221;（line feed）这两个概念的来历和区别。<br />在计算机还没有出现之前，有一种叫做电传打字机（Teletype Model 33）的玩意，每秒钟可以打10个字符。但是它有一个问题，就是打完一行换行的时候，要用去0.2秒，正好可以打两个字符。要是在这0.2秒里面，又有新的字符传过来，那么这个字符将丢失。<br />于是，研制人员想了个办法解决这个问题，就是在每行后面加两个表示结束的字符。一个叫做&#8220;回车&#8221;，告诉打字机把打印头定位在左边界；另一个叫做&#8220;换行&#8221;，告诉打字机把纸向下移一行。<br />这就是&#8220;换行&#8221;和&#8220;回车&#8221;的来历，从它们的英语名字上也可以看出一二。<br />后来，计算机发明了，这两个概念也就被般到了计算机上。那时，存储器很贵，一些科学家认为在每行结尾加两个字符太浪费了，加一个就可以。于是，就出现了分歧。<br />Unix 系统里，每行结尾只有&#8220;&lt;换行&gt;&#8221;，即&#8220;\n&#8221;；Windows系统里面，每行结尾是&#8220;  &lt;回车&gt;&lt;换行&gt;&#8221;，即&#8220;\r\n&#8221;；Mac系统里，每行结尾是&#8220;&lt;回车&gt;&#8221;。一个直接后果是，Unix/Mac系 统下的文件在Windows里打开的话，所有文字会变成一行；而Windows里的文件在Unix/Mac下打开的话，在每行的结尾可能会多出一个^M符 号。 </p></div><br /></span></div></div></div><img src ="http://www.cppblog.com/powerwater/aggbug/206311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-03-24 11:40 <a href="http://www.cppblog.com/powerwater/articles/206311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>结构体数组排序的三种方式</title><link>http://www.cppblog.com/powerwater/articles/206048.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Wed, 05 Mar 2014 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/206048.html</guid><wfw:comment>http://www.cppblog.com/powerwater/comments/206048.html</wfw:comment><comments>http://www.cppblog.com/powerwater/articles/206048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/powerwater/comments/commentRss/206048.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/powerwater/services/trackbacks/206048.html</trackback:ping><description><![CDATA[<p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 12pt; font-family: Arial;">对结构体数组排序的几种方法：</span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 12pt; font-family: Arial;">1.&nbsp;</span><span style="font-size: 12pt; font-family: Arial;">写外部比较函数</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img style="display: inline;" id="Code_Closed_Image_175626" onclick="this.style.display='none'; Code_Closed_Text_175626.style.display='none'; Code_Open_Image_175626.style.display='inline'; Code_Open_Text_175626.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_175626" style="display: none;" onclick="this.style.display='none'; Code_Open_Text_175626.style.display='none'; Code_Closed_Image_175626.style.display='inline'; Code_Closed_Text_175626.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_175626" style="border-right: 1px solid #808080; border-width: 1px; border-style: solid; border-color: #808080; background-color: #ffffff; display: inline;">示例代码</span><span id="Code_Open_Text_175626" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,y;&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /></span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;comp(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">a,</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(a.x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">b.x)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.x</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.y</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.y;<br />}<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;a[]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">{{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">5</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">3</span><span style="color: #000000; ">}};<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a)</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(node);<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(a,a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n,comp);<br />&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; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].x</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].y</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&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 />}<br /><br /></span></span></div><p style="margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:18.0000pt; font-family:'宋体'; "></span></p><p style="margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 12pt; font-family: Arial;">2.&nbsp;</span><span style="font-size: 12pt; font-family: Arial;">写内部比较函数(重载小于号&lt;、大于号&gt;)</span></p><p style="margin-left:42.0000pt; text-indent:-21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 12pt; font-family: Arial;">a)&nbsp;</span><span style="font-size: 12pt; font-family: Arial;">非友员函数</span><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_175728" onclick="this.style.display='none'; Code_Closed_Text_175728.style.display='none'; Code_Open_Image_175728.style.display='inline'; Code_Open_Text_175728.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_175728" style="display: none" onclick="this.style.display='none'; Code_Open_Text_175728.style.display='none'; Code_Closed_Image_175728.style.display='inline'; Code_Closed_Text_175728.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_175728" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">示例代码</span><span id="Code_Open_Text_175728" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;node&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">b)</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">这里只重载了小于号&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">b.x)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;x</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;y</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;a[]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">{{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">5</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">3</span><span style="color: #000000; ">}};<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a)</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(node);<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(a,a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n);<br />&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; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].x</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].y</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&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 />}<br /><br /></span></span></div><p style="margin-left:42.0000pt; text-indent:-21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 12pt; font-family: Arial;">b) </span><span style="font-size: 12pt; font-family: Arial;">友员函数</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><img id="Code_Closed_Image_175451" onclick="this.style.display='none'; Code_Closed_Text_175451.style.display='none'; Code_Open_Image_175451.style.display='inline'; Code_Open_Text_175451.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" height="16" width="11"><img id="Code_Open_Image_175451" style="display: none" onclick="this.style.display='none'; Code_Open_Text_175451.style.display='none'; Code_Closed_Image_175451.style.display='inline'; Code_Closed_Text_175451.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" height="16" width="11"><span id="Code_Closed_Text_175451" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">示例代码</span><span id="Code_Open_Text_175451" style="display: none"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">struct</span><span style="color: #000000; ">&nbsp;node&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;(node&nbsp;a,node&nbsp;b)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(a.x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">b.x)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.x</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.y</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">b.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;friend&nbsp;</span><span style="color: #0000FF; ">bool</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">operator</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;(node&nbsp;a,node&nbsp;b)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(a.x</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">b.x)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.x</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">b.x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;a.y</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">b.y;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;node&nbsp;a[]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">{{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">5</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">},{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">3</span><span style="color: #000000; ">}};<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(a)</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">sizeof</span><span style="color: #000000; ">(node);<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(a,a</span><span style="color: #000000; ">+</span><span style="color: #000000; ">n,greater</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">node</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">());<br />&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; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].x</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">a[i].y</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">endl;<br />&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 />}<br /><br /></span></span></div><p style="margin-bottom: 0pt; margin-top: 0pt;"><br /></p><p style="margin-left:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style=" font-size:18.0000pt; font-family:'宋体'; ">　　</span><span style="font-size: 12pt; font-family: '宋体';">注意，重载了小于号，可以用less&lt;node&gt;()，重载了大于号，才能用greator&lt;node&gt;()&nbsp;。默认是小于，</span><span style=" font-size:18.0000pt; font-family:'宋体'; "><span style="font-size: 12pt; font-family: '宋体';">less&lt;node&gt;()</span></span><span style="font-size: 12pt; font-family: '宋体';">可以省略。如sort(a,a+n,less&lt;node&gt;())可以写成sort(a,a+n)。</span></p><img src ="http://www.cppblog.com/powerwater/aggbug/206048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2014-03-05 17:58 <a href="http://www.cppblog.com/powerwater/articles/206048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>批量改文件名</title><link>http://www.cppblog.com/powerwater/articles/204461.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Tue, 26 Nov 2013 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/204461.html</guid><description><![CDATA[功能：将当前文件夹下面所有的.ans文件改成同名的.out文件<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iostream</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">io.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdlib</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdio</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />#include</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">dir.h</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">using</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; ">&nbsp;std;<br /></span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;path;<br /></span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;N(</span><span style="color: #000000; ">100</span><span style="color: #000000; ">);<br /></span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;oldname[N],newname[N];<br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;path</span><span style="color: #000000; ">=</span><span style="color: #000000; ">getcwd(NULL,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(path</span><span style="color: #000000; ">==</span><span style="color: #000000; ">""</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;_finddata_t&nbsp;fileinfo;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;handle;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">string</span><span style="color: #000000; ">&nbsp;temp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">path</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\\*.ans</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;handle</span><span style="color: #000000; ">=</span><span style="color: #000000; ">_findfirst(temp.c_str(),</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">fileinfo);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">查找到第一个文件，文件信息存入fileinfo&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(handle</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">-1表示未找到，0表示找到&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">do</span><span style="color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldname[n]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">fileinfo.name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newname[n]</span><span style="color: #000000; ">=</span><span style="color: #000000; ">fileinfo.name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(_findnext(handle,</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">fileinfo)</span><span style="color: #000000; ">==</span><span style="color: #000000; ">0</span><span style="color: #000000; ">);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;k,len;<br />&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; ">1</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">n;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k</span><span style="color: #000000; ">=</span><span style="color: #000000; ">newname[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].size();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newname[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">].replace(k</span><span style="color: #000000; ">-</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.out</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">后缀名改为.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ren&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">oldname[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">newname[i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">cout&lt;&lt;temp&lt;&lt;"&nbsp;ok"&lt;&lt;endl;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system(temp.c_str());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;_findclose(handle);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">system("pause");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&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 />}<br /></span></div><img src ="http://www.cppblog.com/powerwater/aggbug/204461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2013-11-26 17:20 <a href="http://www.cppblog.com/powerwater/articles/204461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fstream的使用方法介绍</title><link>http://www.cppblog.com/powerwater/articles/204373.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Thu, 21 Nov 2013 14:44:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/204373.html</guid><description><![CDATA[<div><div> 		<p>在C++中，有一个stream这个类，所有的I/O都以这个&#8220;流&#8221;类为基础的，包括我们要认识的文件I/O，stream这个类有两个重要的运算符：</p> <p>1、插入器(&lt;&lt;)<br />　　向流输出数据。比如说系统有一个默认的标准输出流(cout)，一般情况下就是指的显示器，所以，cout&lt;&lt;"Write Stdout"&lt;&lt;' ';就表示把字符串"Write Stdout"和换行字符(' ')输出到标准输出流。</p> <p>2、析取器(&gt;&gt;)<br />　　从流中输入数据。比如说系统有一个默认的标准输入流(cin)，一般情况下就是指的键盘，所以，cin&gt;&gt;x;就表示从标准输入流中<a name="1"></a><strong style="color: black; background-color: #a0ffff">读取</strong>一个指定类型(即变量x的类型)的数据。</p> <p>　　在C++中，对文件的操作是通过stream的子类<a name="0"></a><strong style="color: black; background-color: #ffff66">fstream</strong>(file stream)来实现的，所以，要用这种方式操作文件，就必须加入头文件<strong style="color: black; background-color: #ffff66">fstream</strong>.h。下面就把此类的文件操作过程一一道来。</p> <p>一、打开文件<br />　　在<strong style="color: black; background-color: #ffff66">fstream</strong>类中，有一个成员函数open()，就是用来打开文件的，其原型是：</p> <p>void open(const char* filename,int mode,int access);</p> <p>参数：</p> <p>filename：　　要打开的文件名 <br />mode：　　　　要打开文件的方式 <br />access：　　　打开文件的属性<br />打开文件的方式在类ios(是所有流式I/O类的基类)中定义，常用的值如下： </p> <p>ios::app：　　　以追加的方式打开文件 <br />ios::ate：　　　文件打开后定位到文件尾，ios:app就包含有此属性 <br />ios::binary： 　以<a name="2"></a><strong style="color: black; background-color: #99ff99">二进制</strong>方式打开文件，缺省的方式是文本方式。两种方式的区别见前文 <br />ios::in：　　　 文件以输入方式打开 <br />ios::out：　　　文件以输出方式打开 <br />ios::nocreate： 不建立文件，所以文件不存在时打开失败　 <br />ios::noreplace：不覆盖文件，所以打开文件时如果文件存在失败 <br />ios::trunc：　　如果文件存在，把文件长度设为0 <br />　　可以用&#8220;或&#8221;把以上属性连接起来，如ios::out|ios::binary</p> <p>　　打开文件的属性取值是：</p> <p>0：普通文件，打开访问 <br />1：只读文件 <br />2：隐含文件 <br />4：系统文件 <br />　　可以用&#8220;或&#8221;或者&#8220;+&#8221;把以上属性连接起来 ，如3或1|2就是以只读和隐含属性打开文件。</p> <p>　　例如：以<strong style="color: black; background-color: #99ff99">二进制</strong>输入方式打开文件c:config.sys </p> <p>　　<strong style="color: black; background-color: #ffff66">fstream</strong> file1;<br />　　file1.open("c:\config.sys",ios::binary|ios::in,0);</p> <p>　　如果open函数只有文件名一个参数，则是以读/写普通文件打开，即：</p> <p>　　file1.open("c:\config.sys");&lt;=&gt;file1.open("c:\config.sys",ios::in|ios::out,0);</p> <p>　　另外，<strong style="color: black; background-color: #ffff66">fstream</strong>还有和open()一样的构造函数，对于上例，在定义的时侯就可以打开文件了：</p> <p>　　<strong style="color: black; background-color: #ffff66">fstream</strong> file1("c:\config.sys");</p> <p>　　特别提出的是，<strong style="color: black; background-color: #ffff66">fstream</strong>有两个子类：ifstream(input file stream)和ofstream(outpu file stream)，ifstream默认以输入方式打开文件，而ofstream默认以输出方式打开文件。</p> <p>　　ifstream file2("c:\pdos.def");//以输入方式打开文件<br />　　ofstream file3("c:\x.123");//以输出方式打开文件</p> <p>　　所以，在实际应用中，根据需要的不同，选择不同的类来定义：如果想以输入方式打开，就用ifstream来定义；如果想以输出方式打开，就用ofstream来定义；如果想以输入/输出方式来打开，就用<strong style="color: black; background-color: #ffff66">fstream</strong>来定义。</p> <p>二、关闭文件<br />　　打开的文件使用完成后一定要关闭，<strong style="color: black; background-color: #ffff66">fstream</strong>提供了成员函数close()来完成此操作，如：file1.close();就把file1相连的文件关闭。</p> <p>三、读写文件<br />　　读写文件分为文本文件和<strong style="color: black; background-color: #99ff99">二进制</strong>文件的<strong style="color: black; background-color: #a0ffff">读取</strong>，对于文本文件的<strong style="color: black; background-color: #a0ffff">读取</strong>比较简单，用插入器和析取器就可以了；而对于<strong style="color: black; background-color: #99ff99">二进制</strong>的<strong style="color: black; background-color: #a0ffff">读取</strong>就要复杂些，下要就详细的介绍这两种方式</p> <p>　　1、文本文件的读写<br />　　文本文件的读写很简单：用插入器(&lt;&lt;)向文件输出；用析取器(&gt;&gt;)从文件输入。假设file1是以输入方式打开，file2以输出打开。示例如下：</p> <p>　　file2&lt;&lt;"I Love You";//向文件写入字符串"I Love You"<br />　　int i;<br />　　file1&gt;&gt;i;//从文件输入一个整数值。 </p> <p>　　这种方式还有一种简单的格式化能力，比如可以指定输出为16进制等等，具体的格式有以下一些</p> <p>操纵符 功能 输入/输出 <br />dec 格式化为十进制数值数据 输入和输出 <br />endl 输出一个换行符并刷新此流 输出 <br />ends 输出一个空字符 输出 <br />hex 格式化为十六进制数值数据 输入和输出 <br />oct 格式化为八进制数值数据 输入和输出 <br />setpxecision(int p) 设置浮点数的精度位数 输出 </p> <p>　　比如要把123当作十六进制输出：file1&lt; </p> <p>　　2、<strong style="color: black; background-color: #99ff99">二进制</strong>文件的读写<br />&#9312;put()<br />　　put()函数向流写入一个字符，其原型是ofstream &amp;put(char ch)，使用也比较简单，如file1.put('c');就是向流写一个字符'c'。 </p> <p>&#9313;get()<br />　　get()函数比较灵活，有3种常用的重载形式：</p> <p>　　一种就是和put()对应的形式：ifstream &amp;get(char &amp;ch);功能是从流中<strong style="color: black; background-color: #a0ffff">读取</strong>一个字符，结果保存在引用ch中，如果到文件尾，返回空字符。如file2.get(x);表示从文件中<strong style="color: black; background-color: #a0ffff">读取</strong>一个字符，并把<strong style="color: black; background-color: #a0ffff">读取</strong>的字符保存在x中。</p> <p>　　另一种重载形式的原型是： int get();这种形式是从流中返回一个字符，如果到达文件尾，返回EOF，如x=file2.get();和上例功能是一样的。</p> <p>　　还有一种形式的原型是：ifstream &amp;get(char *buf,int num,char delim='  ')；这种形式把字符读入由 buf 指向的数组，直到读入了 num 个字符或遇到了由 delim 指定的字符，如果没使用 delim  这个参数，将使用缺省值换行符' '。例如：</p> <p>　　file2.get(str1,127,'A');//从文件中<strong style="color: black; background-color: #a0ffff">读取</strong>字符到字符串str1，当遇到字符'A'或<strong style="color: black; background-color: #a0ffff">读取</strong>了127个字符时终止。</p> <p>&#9314;读写数据块<br />　　要读写<strong style="color: black; background-color: #99ff99">二进制</strong>数据块，使用成员函数read()和write()成员函数，它们原型如下：</p> <p>　　　　read(unsigned char *buf,int num);<br />　　　　write(const unsigned char *buf,int num);</p> <p>　　read()从文件中<strong style="color: black; background-color: #a0ffff">读取</strong> num 个字符到 buf 指向的缓存中，如果在还未读入 num 个字符时就到了文件尾，可以用成员函数 int gcount();来取得实际<strong style="color: black; background-color: #a0ffff">读取</strong>的字符数；而 write() 从buf 指向的缓存写 num 个字符到文件中，值得注意的是缓存的类型是 unsigned char *，有时可能需要类型转换。</p> <p>例：</p> <p>　　　　unsigned char str1[]="I Love You";<br />　　　　int n[5];<br />　　　　ifstream in("xxx.xxx");<br />　　　　ofstream out("yyy.yyy");<br />　　　　out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中<br />　　　　in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中<strong style="color: black; background-color: #a0ffff">读取</strong>指定个整数，注意类型转换<br />　　　　in.close();out.close(); </p> <p>四、检测EOF<br />　　成员函数eof()用来检测是否到达文件尾，如果到达文件尾返回非0值，否则返回0。原型是int eof();</p> <p>例：　　if(in.eof())ShowMessage("已经到达文件尾！");</p> <p>五、文件定位<br />　　和C的文件操作方式不同的是，C++  I/O系统管理两个与一个文件相联系的指针。一个是读指针，它说明输入操作在文件中的位置；另一个是写指针，它下次写操作的位置。每次执行输入或输出时， 相应的指针自动变化。所以，C++的文件定位分为读位置和写位置的定位，对应的成员函数是 seekg()和  seekp()，seekg()是设置读位置，seekp是设置写位置。它们最通用的形式如下：</p> <p>　　　　istream &amp;seekg(streamoff offset,seek_dir origin);<br />　　　　ostream &amp;seekp(streamoff offset,seek_dir origin); </p> <p>　　streamoff定义于 iostream.h 中，定义有偏移量 offset 所能取得的最大值，seek_dir 表示移动的基准位置，是一个有以下值的枚举： </p> <p>ios::beg：　　文件开头 <br />ios::cur：　　文件当前位置 <br />ios::end：　　文件结尾 <br />　　这两个函数一般用于<strong style="color: black; background-color: #99ff99">二进制</strong>文件，因为文本文件会因为系统对字符的解释而可能与预想的值不同。</p> <p>例：</p> <p>　　　　 file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节<br />　　　　 file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节 </p>  	</div></div><img src ="http://www.cppblog.com/powerwater/aggbug/204373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2013-11-21 22:44 <a href="http://www.cppblog.com/powerwater/articles/204373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++标准全部头文件</title><link>http://www.cppblog.com/powerwater/articles/175775.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Tue, 22 May 2012 08:59:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/175775.html</guid><description><![CDATA[<div> 		<div> 		<div><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">C++ 标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义，其中18个提供了C库的功能。&nbsp;&lt;cname&gt;形式的标 准头文件【&nbsp;&lt;complex&gt;例外】其内容与ISO标准C包含的name.h头文件相同，但容纳了C++扩展的功能。 在&nbsp;&lt;cname&gt;形式标准的头文件中，与宏相关的名称在全局作用域中定义，其他名称在std命名空间中声明。在C++中还可以使用 name.h形式的标准C库头文件名。</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">C++内容主要有十类：C1.语言支持&nbsp;C2.输入/输出&nbsp;C3.诊断&nbsp;C4.一般工具&nbsp;C5.字符串C6.容器&nbsp;C7.迭代器支持&nbsp;C8.算法&nbsp;C9.数值操作&nbsp;C10.本地化</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">1.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C1类</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">言支持</span><span style="font-size: 10.5pt; font-family: 宋体; ">头文件：</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&nbsp;&lt;cstddef&gt;&nbsp;定义宏NULL和offsetof，以及其他标准类型size_t和ptrdiff_t。与对应</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">的标准C头文件的区别是，NULL是C++空指针常量的补充定义，宏offsetof接受</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">结构或者联合类型参数，只要他们没有成员指针类型的非静态成员即可。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;limits&gt;&nbsp;提供与基本数据类型相关的定义。例如，对于每个数值数据类型，它定义</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">了可以表示出来的最大值和最小值以及二进制数字的位数。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;climits&gt;&nbsp;提供与基本整数数据类型相关的C样式定义。这些信息的C++样式定义</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">在&nbsp;&lt;limits&gt;中</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cfloat&gt;&nbsp;提供与基本浮点型数据类型相关的C样式定义。这些信息的C++样式定义</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">在&nbsp;&lt;limits&gt;中</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9316;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdlib&gt;&nbsp;提供支持程序启动和终止的宏和函数。这个头文件还声明了许多其他杂</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">项函数，例如搜索和排序函数，从字符串转换为数值等函数。它与对应的标准C</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">头文件stdlib.h不同，定义了abort(void)。abort()函数还有额外的功能，它不为静态</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">或自动对象调用析构函数，也不调用传给atexit()函数的函数。它还定义了exit()函</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">数的额外功能，可以释放静态对象，以注册的逆序调用用atexit()注册的函数。清</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">除并关闭所有打开的C流，把控制权返回给主机环境。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9317;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;new&gt;&nbsp;支持动态内存分配</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9318;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;typeinfo&gt;&nbsp;支持变量在运行期间的类型标识</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9319;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;exception&gt;&nbsp;支持异常处理，这是处理程序中可能发生的错误的一种方式</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9320;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdarg&gt;&nbsp;支持接受数量可变的参数的函数。即在调用函数时，可以给函数传送数</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">量不等的数据项。它定义了宏va_arg、va_end、va_start以及va_list类型</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9321;　</span><span style="font-size: 10.5pt; font-family: 宋体; ">&lt;</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">csetjmp&gt;&nbsp;为C样式的非本地跳跃提供函数。这些函数在C++中不常用</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">11　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;csignal&gt;&nbsp;为中断处理提供C样式支持</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">2.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C2类</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">输入/输出</span><span style="font-size: 10.5pt; font-family: 宋体; ">头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;&nbsp;iostream&gt;&nbsp;支持标准流cin、cout、cerr和clog的输入和输出，它还支持多字节字</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">符标准流wcin、wcout、wcerr和wclog。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;iomanip&gt;&nbsp;提供操纵程序，允许改变流的状态，从而改变输出的格式。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;ios&gt;&nbsp;定义iostream的基类</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;istream&gt;&nbsp;为管理输出流缓存区的输入定义模板类</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9316;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;ostream&gt;&nbsp;为管理输出流缓存区的输出定义模板类</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9317;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;sstream&gt;&nbsp;支持字符串的流输入输出</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9318;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;fstream&gt;&nbsp;支持文件的流输入输出</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9319;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;iosfwd&gt;&nbsp;为输入输出对象提供向前的声明</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9320;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;streambuf&gt;&nbsp;支持流输入和输出的缓存</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9321;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdio&gt;&nbsp;为标准流提供C样式的输入和输出</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">11　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cwchar&gt;&nbsp;支持多字节字符的C样式输入输出</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">3.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C3类</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">诊断</span><span style="font-size: 10.5pt; font-family: 宋体; ">头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;stdexcept&gt;&nbsp;定义标准异常。异常是处理错误的方式</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cassert&gt;&nbsp;定义断言宏，用于检查运行期间的情形</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cerrno&gt;&nbsp;支持C样式的错误信息</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">4.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C4类</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">一般工具</span><span style="font-size: 10.5pt; font-family: 宋体; ">头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;utility&gt;&nbsp;定义重载的关系运算符，简化关系运算符的写入，它还定义了pair类型，</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">该类型是一种模板类型，可以存储一对值。这些功能在库的其他地方使用</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;functional&gt;&nbsp;定义了许多函数对象类型和支持函数对象的功能，函数对象是支持</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">operator()()函数调用运算符的任意对象</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;memory&gt;&nbsp;给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;ctime&gt;&nbsp;支持系统时钟函数</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">5.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C5类</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">字符串</span><span style="font-size: 10.5pt; font-family: 宋体; ">头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;string&gt;&nbsp;为字符串类型提供支持和定义，包括单字节字符串(由char组成)的string</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">和多字节字符串(由wchar_t组成)</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cctype&gt;&nbsp;单字节字符类别</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cwctype&gt;&nbsp;多字节字符类别</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstring&gt;&nbsp;为处理非空字节序列和内存块提供函数。这不同于对应的标准C库头文</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">件，几个C样式字符串的一般C库函数被返回值为const和非const的函数对替代</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">了</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9316;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cwchar&gt;&nbsp;为处理、执行I/O和转换多字节字符序列提供函数，这不同于对应的标</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">准C库头文件，几个多字节C样式字符串操作的一般C库函数被返回值为const</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">和非const的函数对替代了。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9317;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdlib&gt;&nbsp;为把单字节字符串转换为数值、在多字节字符和多字节字符串之间转换</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">提供函数</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">6.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C6类容器头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;vector&gt;&nbsp;定义vector序列模板，这是一个大小可以重新设置的数组类型，比普通数</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">组更安全、更灵活&lt;list&gt;&nbsp;定义list序列模板，这是一个序列的链表，常常在任意位</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">置插入和删除元素</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;deque&gt;&nbsp;定义deque序列模板，支持在开始和结尾的高效插入和删除操作</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;queue&gt;&nbsp;为队列(先进先出)数据结构定义序列适配器queue和priority_queue</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;stack&gt;&nbsp;为堆栈(后进先出)数据结构定义序列适配器stack</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9316;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;map&gt;&nbsp;map是一个关联容器类型，允许根据键值是唯一的，且按照升序存储。</span><span style="font-size: 10.5pt; font-family: 宋体; ">			</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">multimap类似于map，但键不是唯一的。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9317;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;set&gt;&nbsp;set是一个关联容器类型，用于以升序方式存储唯一值。multiset类似于set，</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">但是值不必是唯一的。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9318;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;bitset&gt;&nbsp;为固定长度的位序列定义bitset模板，它可以看作固定长度的紧凑型bool</span><span style="font-size: 10.5pt; font-family: 宋体; ">		</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">数组</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">7.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C7类迭代器支持头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;iterator&gt;&nbsp;给迭代器提供定义和支持</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">8.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C8类算法头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;algorithm&gt;&nbsp;提供一组基于算法的函数，包括置换、排序、合并和搜索</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdlib&gt;&nbsp;声明C标准库函数bsearch()和qsort()，进行搜索和排序</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;ciso646&gt;&nbsp;允许在代码中使用and代替&amp;&amp;</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">9.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C9类数值操作头文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;complex&gt;&nbsp;支持复杂数值的定义和操作</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;valarray&gt;&nbsp;支持数值矢量的操作</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9314;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;numeric&gt;&nbsp;在数值序列上定义一组一般数学操作，例如accumulate和inner_product</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9315;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cmath&gt;&nbsp;这是C数学库，其中还附加了重载函数，以支持C++约定</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9316;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;cstdlib&gt;&nbsp;提供的函数可以提取整数的绝对值，对整数进行取余数操作</span></p><p style="margin-left:21.2500pt; text-indent:-21.2500pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">10.&nbsp;</span><span style="font-size: 10.5pt; font-family: 宋体; ">C10头本地化文件</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9312;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;locale&gt;&nbsp;提供的本地化包括字符类别、排序序列以及货币和日期表示。</span></p><p style="text-indent:20.0000pt; margin-bottom:0pt; margin-top:0pt; "><span style="font-size: 10.5pt; font-family: 宋体; ">&#9313;　</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">&lt;clocale&gt;&nbsp;对本地化提供C样式支持</span></p></div> 		</div></div><img src ="http://www.cppblog.com/powerwater/aggbug/175775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2012-05-22 16:59 <a href="http://www.cppblog.com/powerwater/articles/175775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何计算程序运行时间</title><link>http://www.cppblog.com/powerwater/articles/173874.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Mon, 07 May 2012 01:17:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/173874.html</guid><wfw:comment>http://www.cppblog.com/powerwater/comments/173874.html</wfw:comment><comments>http://www.cppblog.com/powerwater/articles/173874.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/powerwater/comments/commentRss/173874.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/powerwater/services/trackbacks/173874.html</trackback:ping><description><![CDATA[<div>#include&lt;iostream&gt;<br />#include&lt;ctime&gt;<br />using namespace std;<br />int main()<br />{<br />&nbsp;&nbsp;&nbsp; clock_t begin;&nbsp; //时钟类型<br />&nbsp;&nbsp;&nbsp; for (int i=0;i&lt;100000000;i++) ;<br />&nbsp;&nbsp;&nbsp; cout&lt;&lt;(clock()-begin)/(double)CLOCKS_PER_SEC&lt;&lt;endl; //CLOCKS_PER_SEC: 每秒钟时钟单元数，输出单位为秒<br />&nbsp;&nbsp;&nbsp; system("pause");<br />&nbsp;&nbsp;&nbsp; return 0;<br />}<br /><br />
<p>#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;windows.h&gt;<br />using namespace std;<br />const int N = 1e8;</p>
<p>int main(){<br />&nbsp;int t1=GetTickCount();<br />&nbsp;for (int i=0;i&lt;N;i++);<br />&nbsp;int t2=GetTickCount();<br />&nbsp;cout&lt;&lt;(t2-t1)/1000.0&lt;&lt;endl;<br />&nbsp;return 0;<br />}</p></div><img src ="http://www.cppblog.com/powerwater/aggbug/173874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2012-05-07 09:17 <a href="http://www.cppblog.com/powerwater/articles/173874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cctype函数</title><link>http://www.cppblog.com/powerwater/articles/173872.html</link><dc:creator>龙在江湖</dc:creator><author>龙在江湖</author><pubDate>Mon, 07 May 2012 01:06:00 GMT</pubDate><guid>http://www.cppblog.com/powerwater/articles/173872.html</guid><description><![CDATA[<div>  <table border="0" cellpadding="0" cellspacing="0" width="857"><colgroup><col style="width:102pt" width="136">  <col style="width:541pt" width="721">  </colgroup><tbody><tr style="height:30.0pt" height="40">   <td style="height:30.0pt;width:102pt" height="40" width="136">函数名称</td>   <td style="border-left:none;width:541pt" width="721">返回值</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isalnum()</td>   <td style="border-top:none;border-left:none">如果参数是字母数字，即字母或者数字，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isalpha()</td>   <td style="border-top:none;border-left:none">如果参数是字母，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isblank()</td>   <td style="border-top:none;border-left:none">如果参数是水平制表符或空格，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">iscntrl()</td>   <td style="border-top:none;border-left:none">如果参数是控制字符，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isdigit()</td>   <td style="border-top:none;border-left:none">如果参数是数字（0－9），函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isgraph()</td>   <td style="border-top:none;border-left:none">如果参数是除空格之外的打印字符，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">islower()</td>   <td style="border-top:none;border-left:none">如果参数是小写字母，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isprint()</td>   <td style="border-top:none;border-left:none">如果参数是打印字符（包括空格），函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">ispunct()</td>   <td style="border-top:none;border-left:none">如果参数是标点符号，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isspace()</td>   <td style="border-top:none;border-left:none">如果参数是标准空白字符，如空格、换行符、水平或垂直制表符，函数返true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isupper()</td>   <td style="border-top:none;border-left:none">如果参数是大写字母，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">isxdigit()</td>   <td style="border-top:none;border-left:none">如果参数是十六进制数字，即0－9、a－f、A－F，函数返回true</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">tolower()</td>   <td style="border-top:none;border-left:none">如果参数是大写字符，返回其小写，否则返回该参数</td>  </tr>  <tr style="height:30.0pt" height="40">   <td style="height:30.0pt;border-top:none" height="40">toupper()</td>   <td style="border-top:none;border-left:none">如果参数是小写字符，返回其大写，否则返回该参数</td>  </tr> </tbody></table></div><img src ="http://www.cppblog.com/powerwater/aggbug/173872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/powerwater/" target="_blank">龙在江湖</a> 2012-05-07 09:06 <a href="http://www.cppblog.com/powerwater/articles/173872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>