<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LiangXu Wang &#187; c++</title>
	<atom:link href="http://wlx.westgis.ac.cn/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://wlx.westgis.ac.cn</link>
	<description>technology backup/share</description>
	<lastBuildDate>Sat, 14 Jan 2012 03:56:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>C++矩阵库比较</title>
		<link>http://wlx.westgis.ac.cn/682/</link>
		<comments>http://wlx.westgis.ac.cn/682/#comments</comments>
		<pubDate>Sun, 15 May 2011 10:11:22 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[armadillo]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[it++]]></category>
		<category><![CDATA[matrix]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=682</guid>
		<description><![CDATA[同化系统中要大量使用矩阵类，现在使用的是之前有我们自己发展的纯C++的一个矩阵类，而后又引入了IT++类的支持，现在回头来看，又有很多新的C++矩阵类库发展出来，并且有很好的特性。今天就用了几个测试代码在我的DELL T7400工作站进行了测试，主要比较的是我们自己的矩阵类、armadillo、IT++（参考文献中还有和其他矩阵类的比较）。 1. 实际测试平台 UBUNTU 11.04，DELL T7400 INTEL XEON X5450@3.0GHz（双CPU，各四核，测试时只用1核）。 g++ 4.5.2 it++ 4.0.7 （系统自带） armadillo 1.2.0 (手工安装） 2. 编译方法 armadillo采用的是如下编译方法： g++ -o test -larmadillo -O2 -fwhole-program xxx.cpp IT++采用的是如下编译方法： g++ -o test -litpp -O2 -fwhole-program xxx.cpp 我们的矩阵类用的是如下的编译方法： g++ -o test &#8230; <a href="http://wlx.westgis.ac.cn/682/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>同化系统中要大量使用矩阵类，现在使用的是之前有我们自己发展的纯C++的一个矩阵类，而后又引入了IT++类的支持，现在回头来看，又有很多新的C++矩阵类库发展出来，并且有很好的特性。今天就用了几个测试代码在我的DELL T7400工作站进行了测试，主要比较的是我们自己的矩阵类、armadillo、IT++（参考文献中还有和其他矩阵类的比较）。<span id="more-682"></span></p>
<p>1. 实际测试平台<br />
UBUNTU 11.04，DELL T7400 INTEL XEON X5450@3.0GHz（双CPU，各四核，测试时只用1核）。<br />
g++ 4.5.2<br />
it++ 4.0.7 （系统自带）<br />
armadillo 1.2.0 (手工安装）<br />
2. 编译方法<br />
armadillo采用的是如下编译方法：</p>
<blockquote><p>g++ -o test -larmadillo -O2 -fwhole-program xxx.cpp</p></blockquote>
<p>IT++采用的是如下编译方法：</p>
<blockquote><p>g++ -o test -litpp -O2 -fwhole-program xxx.cpp</p></blockquote>
<p>我们的矩阵类用的是如下的编译方法：</p>
<blockquote><p>g++ -o test -larmadillo -O2 -fwhole-program -ldas/include/ ldas/src/util/exception.cpp cas1.cpp</p></blockquote>
<p>3. 测试方法及代码<br />
主要测试矩阵的加法运算和乘法运算，构建了ABZ三个1000*1000矩阵，分别测试了Z=A+B、Z=A*B以及Z=A+B+C、Z=A*B*C各100次，比较其计算时间。<br />
armadillo代码：</p>
<blockquote><p><code>#include &lt;iostream&gt;<br />
#include &lt;armadillo&gt;<br />
 int main() {<br />
 int size = 1000; int N = 100;<br />
//Armadillo<br />
// size and N are specified by the user on the command line<br />
arma::mat A = arma::randu(size,size);<br />
arma::mat B = arma::randu(size,size);<br />
arma::mat C = arma::randu(size,size);<br />
arma::mat Z = arma::zeros(size,size); int i;<br />
arma::wall_clock timer; timer.tic();<br />
for(i=0; i&lt;N; ++i) Z = A+B+C; // or Z = A+B+C ... etc<br />
std::cout &lt;&lt; "armadillo: time taken for addition = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
timer.tic();<br />
for(i=0; i&lt;N; ++i) Z = A*B*C; // or Z = A+B+C ... etc<br />
std::cout &lt;&lt; "armadillo: time taken for multiplication = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
}</code></p></blockquote>
<p>IT++测试代码：</p>
<blockquote><p><code>#include &lt;itpp/itbase.h&gt;<br />
 #include &lt;itpp/base/random.h&gt;<br />
#include &lt;itpp/base/timing.h&gt;<br />
int main()<br />
{ int size = 1000; int N = 100;<br />
//IT++<br />
itpp::mat A2 = itpp::randu(size,size);<br />
itpp::mat B2 = itpp::randu(size,size);<br />
itpp::mat C = itpp::randu(size,size);<br />
itpp::mat Z2 = itpp::zeros(size,size); int i;<br />
itpp::Real_Timer timer; timer.tic();<br />
for(i=0; i&lt;N; ++i) Z2 = A2+B2+C;<br />
std::cout &lt;&lt; "IT++: time taken for addition = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
timer.tic();<br />
for(i=0; i&lt;N; ++i) Z2 = A2*B2*C; // or Z = A+B+C ... etc<br />
std::cout &lt;&lt; "IT++: time taken for multiplication = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
}</code></p></blockquote>
<p>自己实现的矩阵类：</p>
<blockquote><p><code>#include &lt;iostream&gt;<br />
#include &lt;armadillo&gt;<br />
#include "matrix.hpp"<br />
#include "exception.h"<br />
 int main() {<br />
 int size = 1000; int N = 100;<br />
//Armadillo<br />
// size and N are specified by the user on the command line<br />
ldas::Matrix&lt;double&gt; A(size,size);<br />
for(int i=0;i&lt;size;i++)<br />
  for(int j=0;j&lt;size;j++) A.set(i+1,j+1,rand()/RAND_MAX);<br />
ldas::Matrix&lt;double&gt; B(size,size);<br />
for(int i=0;i&lt;size;i++)  for(int j=0;j&lt;size;j++) B.set(i+1,j+1,rand()/RAND_MAX);<br />
ldas::Matrix&lt;double&gt; C(size,size);<br />
for(int i=0;i&lt;size;i++)  for(int j=0;j&lt;size;j++) C.set(i+1,j+1,rand()/RAND_MAX);<br />
ldas::Matrix&lt;double&gt;  Z(size,size);<br />
arma::wall_clock timer; timer.tic();<br />
for(int i=0; i&lt;N; ++i) Z = A+B; // or Z = A+B+C ... etc<br />
std::cout &lt;&lt; "our Matrix: time taken for addition = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
timer.tic();<br />
for(int i=0; i&lt;N; ++i) Z = A*B; // or Z = A+B+C ... etc<br />
std::cout &lt;&lt; "our Matrix: time taken for multiplication = " &lt;&lt; timer.toc() / double(N) &lt;&lt; std::endl;<br />
}</code></p></blockquote>
<p>4. 测试结果<br />
A+B&#038;A*B<br />
armadillo: time taken for addition = 0.00803794<br />
armadillo: time taken for multiplication = 0.117536<br />
IT++: time taken for addition = 0.0119361<br />
IT++: time taken for multiplication = 0.119165<br />
our Matrix: time taken for addition = 0.029522<br />
our Matrix: time taken for multiplication = 17.4216</p>
<p>A+B+C&#038;A*B*C<br />
armadillo: time taken for addition = 0.0107693<br />
armadillo: time taken for multiplication = 0.230288<br />
IT++: time taken for addition = 0.0254268<br />
IT++: time taken for multiplication = 0.237969<br />
our Matrix: time taken for addition = 0.05127<br />
our Matrix: time taken for multiplication = 34.428</p>
<p>5. 测试结果分析<br />
如armadillo作者自己所言，armadillo的计算速度最快，矩阵的加法，特别有长算式的计算，armadillo的优势非常明显。我们自己的矩阵类由于乘法是采用常规方法实现的，没有使用BLAS，因此效率差距很明显。</p>
<p>6. 参考文献<br />
<a href="http://sourceforge.net/projects/itpp/forums/forum/115656/topic/3740250">it++ vs armadillo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/682/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ 0X将在2011年发布</title>
		<link>http://wlx.westgis.ac.cn/640/</link>
		<comments>http://wlx.westgis.ac.cn/640/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 07:46:05 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=640</guid>
		<description><![CDATA[经过多年的反复，新版本的C++标准即将发布，将重新命名为C++ 2011。 reference： 1. http://www.osnews.com/story/24578/ISO_Finalizes_C_Update 2. http://www.cio.com.au/article/381241/iso_finalizes_c_update/]]></description>
			<content:encoded><![CDATA[<p>经过多年的反复，新版本的C++标准即将发布，将重新命名为C++ 2011。</p>
<p>reference：<br />
1. <a href="http://www.osnews.com/story/24578/ISO_Finalizes_C_Update">http://www.osnews.com/story/24578/ISO_Finalizes_C_Update</a><br />
2. <a href="http://www.cio.com.au/article/381241/iso_finalizes_c_update/">http://www.cio.com.au/article/381241/iso_finalizes_c_update/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/640/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cout float的显示问题</title>
		<link>http://wlx.westgis.ac.cn/589/</link>
		<comments>http://wlx.westgis.ac.cn/589/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 04:52:05 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[cout]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=589</guid>
		<description><![CDATA[在c++，使用cout直接显示float类型的数据，在不同系统上显示方式可能有所不同。 测试代码： #include &#60;iostream&#62; using namespace std; int main() { float t=0.000000277; cout&#60;&#60;t&#60;&#60;endl; return 0; } 在LINUX上： 2.77e-07 而在WINDOWS上结果如下： 2.77e-007]]></description>
			<content:encoded><![CDATA[<p>在c++，使用cout直接显示float类型的数据，在不同系统上显示方式可能有所不同。<br />
测试代码：<br />
<code>#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>int main()<br />
{<br />
    float t=0.000000277;<br />
    cout&lt;&lt;t&lt;&lt;endl;<br />
    return 0;<br />
}</code><br />
在LINUX上：</p>
<blockquote><p>2.77e-07</p></blockquote>
<p>而在WINDOWS上结果如下：</p>
<blockquote><p>2.77e-007</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/589/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu下使用netcdf库</title>
		<link>http://wlx.westgis.ac.cn/587/</link>
		<comments>http://wlx.westgis.ac.cn/587/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 16:12:42 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[netcdf]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=587</guid>
		<description><![CDATA[netcdf自身带了C++接口，可是按照例子，怎么也连接不了，最后发现是要加参数： g++ -lnetcdf_c++ -lnetcdf -o test *.cpp]]></description>
			<content:encoded><![CDATA[<p>netcdf自身带了C++接口，可是按照例子，怎么也连接不了，最后发现是要加参数：</p>
<blockquote><p>g++ -lnetcdf_c++ -lnetcdf -o test *.cpp</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/587/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c++的类模板</title>
		<link>http://wlx.westgis.ac.cn/551/</link>
		<comments>http://wlx.westgis.ac.cn/551/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 03:41:56 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[friend]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=551</guid>
		<description><![CDATA[c++的类模板中有一些要注意的地方： 1、除非编译器实现了export关键字，否则将模板成员函数放置在一个独立的实现文件中将无法运行。（在GCC中，就是无法连接，编译可以通过） 因为模板不是函数，它们不能单独编译。模板必须与特定的模板实例化请求一起使用。 2、在类模板的操作符重载的友元函数中，要先声明，如]]></description>
			<content:encoded><![CDATA[<p>c++的类模板中有一些要注意的地方：<br />
1、除非编译器实现了export关键字，否则将模板成员函数放置在一个独立的实现文件中将无法运行。（在GCC中，就是无法连接，编译可以通过）<br />
因为模板不是函数，它们不能单独编译。模板必须与特定的模板实例化请求一起使用。</p>
<p>2、在类模板的操作符重载的友元函数中，要先声明，如<<操作符，要在函数后添加一对<>符合：</p>
<blockquote><p><code>template &lt;class T&gt;<br />
 class Matrix;<br />
template &lt;class T&gt;<br />
ostream&amp; operator &lt;&lt;(ostream&amp; os,const Matrix&lt;T&gt;&amp; matrix);</p>
<p>template &lt;class T&gt;<br />
class Matrix<br />
	{<br />
public:<br />
friend ostream&amp; operator &lt;&lt; &lt;&gt;(ostream&amp; os,const Matrix&lt;T&gt;&amp; matrix);<br />
}</code></p></blockquote>
<p>而+-*/等操作符的友元重载则需要定义在类声明内部，否则连接会出错。</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/551/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# 2008：From Novice to Professional</title>
		<link>http://wlx.westgis.ac.cn/479/</link>
		<comments>http://wlx.westgis.ac.cn/479/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 06:14:23 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[apress]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/479/</guid>
		<description><![CDATA[Apress.Beginning.C.Sharp.2008.From.Novice.to.Professional.Nov.2007 书名：《C# 2008：From Novice to Professional》 作者：Christian Gross (Author) 出版商：Apress 发行日期：2007年11月 语言：英语 ISBN-10/ISBN-13：1590598695/978-1590598696 http://www.amazon.com/exec/obidos/tg/detail/-/1590598695/ 粗看了一遍，介绍的比较全面，感觉不是很深入。]]></description>
			<content:encoded><![CDATA[<p>Apress.Beginning.C.Sharp.2008.From.Novice.to.Professional.Nov.2007<br />
书名：《C# 2008：From Novice to Professional》<br />
作者：Christian Gross (Author)<br />
出版商：Apress<br />
发行日期：2007年11月<br />
语言：英语<br />
ISBN-10/ISBN-13：1590598695/978-1590598696</p>
<p>http://www.amazon.com/exec/obidos/tg/detail/-/1590598695/</p>
<p><img src="http://ecx.images-amazon.com/images/I/51z%2Blm-ev3L._AA240_.jpg" alt="book image" /></p>
<p>粗看了一遍，介绍的比较全面，感觉不是很深入。</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/479/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>生成UUID/GUID</title>
		<link>http://wlx.westgis.ac.cn/469/</link>
		<comments>http://wlx.westgis.ac.cn/469/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 04:07:03 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[guid]]></category>
		<category><![CDATA[libuuid1]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[uuid]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/469/</guid>
		<description><![CDATA[php的生成办法： &#60;?php class System { function currentTimeMillis() { list($usec, $sec) = explode(" ",microtime()); return $sec.substr($usec, 2, 3); } } class NetAddress { var $Name = 'localhost'; var $IP = '127.0.0.1'; function getLocalHost() // static { $address = new NetAddress(); $address-&#62;Name &#8230; <a href="http://wlx.westgis.ac.cn/469/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>php的生成办法：</p>
<blockquote><p><code>&lt;?php<br />
   class System<br />
{<br />
        function currentTimeMillis()<br />
        {<br />
                list($usec, $sec) = explode(" ",microtime());<br />
                return $sec.substr($usec, 2, 3);<br />
        }</p>
<p>}</p>
<p>class NetAddress<br />
{</p>
<p>        var $Name = 'localhost';<br />
        var $IP = '127.0.0.1';</p>
<p>        function getLocalHost() // static<br />
        {<br />
                $address = new NetAddress();<br />
                $address-&gt;Name = $_ENV["COMPUTERNAME"];<br />
                $address-&gt;IP = $_SERVER["SERVER_ADDR"];</p>
<p>                return $address;<br />
        }</p>
<p>        function toString()<br />
        {<br />
                return strtolower($this-&gt;Name.'/'.$this-&gt;IP);<br />
        }</p>
<p>}</p>
<p>class Random<br />
{<br />
        function nextLong()<br />
        {<br />
                $tmp = rand(0,1)?'-':'';<br />
                return $tmp.rand(1000, 9999).rand(1000, 9999).rand(1000, 9999).rand(100, 999).rand(100, 999);<br />
        }<br />
}</p>
<p>// 三段<br />
// 一段是微秒 一段是地址 一段是随机数<br />
class Guid<br />
{</p>
<p>        var $valueBeforeMD5;<br />
        var $valueAfterMD5;</p>
<p>        function Guid()<br />
        {<br />
                $this-&gt;getGuid();<br />
        }<br />
//<br />
        function getGuid()<br />
        {<br />
                $address = NetAddress::getLocalHost();<br />
                $this-&gt;valueBeforeMD5 = $address-&gt;toString().':'.System::currentTimeMillis().':'.Random::nextLong();<br />
                $this-&gt;valueAfterMD5 = md5($this-&gt;valueBeforeMD5);<br />
        }</p>
<p>        function newGuid()<br />
        {<br />
                $Guid = new Guid();<br />
                return $Guid;<br />
        }</p>
<p>        function toString()<br />
        {<br />
                $raw = strtoupper($this-&gt;valueAfterMD5);<br />
                return substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20);<br />
        }</p>
<p>}<br />
?&gt;<br />
</code></p></blockquote>
<p>然后就可以这样调用：</p>
<blockquote><p><code>   1.  &lt;?php<br />
   2. require_once("guid.class.php");<br />
   3. $Guid = new Guid();<br />
   4. print $Guid-&gt;toString();<br />
   5. ?&gt;   </code></p></blockquote>
<p>linux下可以用uuidgen命令来生成UUID，也可以在c/c++程序里调用：</p>
<blockquote><p><code>/* clear.c */<br />
void uuid_clear(uuid_t uu);</p>
<p>/* compare.c */<br />
int uuid_compare(const uuid_t uu1, const uuid_t uu2);</p>
<p>/* copy.c */<br />
void uuid_copy(uuid_t dst, const uuid_t src);</p>
<p>/* gen_uuid.c */<br />
void uuid_generate(uuid_t out);<br />
void uuid_generate_random(uuid_t out);<br />
void uuid_generate_time(uuid_t out);</p>
<p>/* isnull.c */<br />
int uuid_is_null(const uuid_t uu);</p>
<p>/* parse.c */<br />
int uuid_parse(const char *in, uuid_t uu);</p>
<p>/* unparse.c */<br />
void uuid_unparse(const uuid_t uu, char *out);</p>
<p>/* uuid_time.c */<br />
time_t uuid_time(const uuid_t uu, struct timeval *ret_tv);<br />
int uuid_type(const uuid_t uu);<br />
int uuid_variant(const uuid_t uu);</code></p></blockquote>
<p>在ubuntu下，需要确认已经安装对应的库：</p>
<blockquote><p>sudo aptitude install libuuid1 uuid-dev</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/469/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>c++中如何创建目录</title>
		<link>http://wlx.westgis.ac.cn/464/</link>
		<comments>http://wlx.westgis.ac.cn/464/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 06:20:50 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[directory]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/464/</guid>
		<description><![CDATA[c++中读写文件直接使用fstream就可以操作，但如何对目录进行操作？ 一番搜索下来后，发现std库并不能处理目录的操作，需要使用额外库来进行操作。 windows平台下： #include &#60;windows.h&#62; CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs); linux平台下： #include &#60;sys/stat.h&#62; mkdir (const char *path, mode_t mode); 一个例子： #include &#60;sys/types.h&#62; #include &#60;sys/stat.h&#62; int status; ... status = mkdir("/home/cnd/mod1", S_IRWXU &#124; S_IRWXG &#124; S_IROTH &#124; S_IXOTH); 还可以使用boost的跨平台方案： #include "boost/filesystem.hpp" &#8230; <a href="http://wlx.westgis.ac.cn/464/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>c++中读写文件直接使用fstream就可以操作，但如何对目录进行操作？<br />
一番搜索下来后，发现std库并不能处理目录的操作，需要使用额外库来进行操作。<br />
windows平台下：</p>
<blockquote><p><code>#include &lt;windows.h&gt;</p>
<p>CreateDirectory (char *DirName, SECURITY_ATTRIBUTES Attribs);</code></p></blockquote>
<p>linux平台下：</p>
<blockquote><p><code>#include &lt;sys/stat.h&gt;</p>
<p>mkdir (const char *path, mode_t mode);</code></p></blockquote>
<p><a href="http://www.opengroup.org/onlinepubs/000095399/functions/mkdir.html">一个例子</a>：<br />
<code>#include &lt;sys/types.h&gt;<br />
#include &lt;sys/stat.h&gt;</p>
<p>int status;<br />
...<br />
status = mkdir("/home/cnd/mod1", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);</code><br />
还可以使用<a href="http://www.boost.org/libs/filesystem/doc/index.htm">boost</a>的跨平台方案：</p>
<blockquote><p><code>#include "boost/filesystem.hpp"   // includes all needed Boost.Filesystem declarations<br />
#include &lt;iostream&gt;               // for std::cout<br />
using boost::filesystem;          // for ease of tutorial presentation;<br />
                                  //  a namespace alias is preferred practice in real code<br />
create_directory( "foobar" );</code></p></blockquote>
<p>BTW: boost filesystem在g++下的编译方法：</p>
<blockquote><p>g++ -lboost_filesystem &#8230;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/464/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c++中的string转换</title>
		<link>http://wlx.westgis.ac.cn/429/</link>
		<comments>http://wlx.westgis.ac.cn/429/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 08:35:17 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/429/</guid>
		<description><![CDATA[如何转换string到其他类型？如何从其他类型转换到string？ 代码1：toString template &#60;class T&#62; std::string toString(const T&#38; a) { std::ostringstream ost; ost &#60;&#60; a; return ost.str(); } 代码2：fromString template&#60;typename T&#62;T fromString( const std::string&#38; s) { std::istringstream is(s); T t; is &#62;&#62; t; return t; } 使用方法： int d = &#8230; <a href="http://wlx.westgis.ac.cn/429/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>如何转换string到其他类型？如何从其他类型转换到string？<br />
代码1：toString<br />
<code>    template &lt;class T&gt; std::string toString(const T&amp; a)<br />
    {<br />
        std::ostringstream ost;<br />
        ost &lt;&lt; a;<br />
        return ost.str();<br />
    }</code><br />
代码2：fromString<br />
<code>    template&lt;typename T&gt;T fromString( const std::string&amp; s)<br />
    {<br />
        std::istringstream is(s);<br />
        T t;<br />
        is &gt;&gt; t;<br />
        return t;<br />
    }</code><br />
使用方法：<br />
<code>int d = fromString&lt;int&gt;( s );<br />
string str=toString(d);</code></p>
<p>参考：</p>
<p>http://www.thescripts.com/forum/thread62219.html</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/429/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用FileChooserDialog打开多文件</title>
		<link>http://wlx.westgis.ac.cn/425/</link>
		<comments>http://wlx.westgis.ac.cn/425/#comments</comments>
		<pubDate>Wed, 12 Sep 2007 14:07:46 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[FileChooserDialog]]></category>
		<category><![CDATA[gtkmm]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/425/</guid>
		<description><![CDATA[单文件比较简单， 看到这个函数的原型是这样的： Glib::SListHandle&#60;Glib::ustring&#62; Gtk::FileChooser::get_filenames ( ) const 因此，就以为要使用这样的变量来进行声明： Glib::SListHandle&#60;Glib::ustring&#62; filenames =dialog.get_filenames(); for(int i=0;i&#60;filenames.size();i++) { //Notice that this is a std::string, not a Glib::ustring. //std::string filename = dialog.get_filename(); std::cout &#60;&#60; "File selected: " &#60;&#60; filenames[i] &#60;&#60; std::endl; } 结果发现编译不通过，再仔细看看，Glib::SListHandle并没有重载[]操作符。 再网络上搜索后发现有人和我的问题相同： That &#8230; <a href="http://wlx.westgis.ac.cn/425/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>单文件比较简单，<br />
看到这个函数的原型是这样的：<br />
<code>Glib::SListHandle&lt;Glib::ustring&gt; Gtk::FileChooser::get_filenames  	(  	  	 )   	 const</code><br />
因此，就以为要使用这样的变量来进行声明：<br />
<code>		Glib::SListHandle&lt;Glib::ustring&gt; filenames =dialog.get_filenames();<br />
		for(int i=0;i&lt;filenames.size();i++)<br />
		{<br />
		  //Notice that this is a std::string, not a Glib::ustring.<br />
		  //std::string filename = dialog.get_filename();<br />
		  std::cout &lt;&lt; "File selected: " &lt;&lt;  filenames[i] &lt;&lt; std::endl;<br />
		}</code><br />
结果发现编译不通过，再仔细看看，Glib::SListHandle并没有重载[]操作符。<br />
再网络上搜索后发现有人和我的问题相同：</p>
<blockquote><p><code>That looks like a case where the GLib documentation was automatically<br />
converted to glibmm documentation, but it doesn't really make sense.<br />
SListHandle and ListHandle types are 'intermediate' types that you<br />
shouldn't ever really need to use.  They just provide handy<br />
conversions to any of the standard containers.  So, you should just be<br />
able to use either std::list&lt;&gt; or std::vector&lt;&gt; or something like<br />
that. So something like the following:</p>
<p>std::list&lt;Glib::ustring&gt; filenames = chooser.get_filenames();</code></p></blockquote>
<p>而且，紧跟的一个邮件说明需要使用std::string来声明，就是应该这样：<br />
<code>std::vector&lt;std::string&gt; filenames=chooser.get_filenames();</code><br />
恩，这样就清楚了。</p>
<p>参考：http://mail.gnome.org/archives/gtkmm-list/2007-May/msg00178.html</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/425/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

