﻿<?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++博客-guaiguai-随笔分类-boost</title><link>http://www.cppblog.com/guaiguai/category/7476.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 01 Jul 2008 21:46:42 GMT</lastBuildDate><pubDate>Tue, 01 Jul 2008 21:46:42 GMT</pubDate><ttl>60</ttl><item><title>boost:tuple</title><link>http://www.cppblog.com/guaiguai/archive/2008/07/01/55076.html</link><dc:creator>guaiguai</dc:creator><author>guaiguai</author><pubDate>Tue, 01 Jul 2008 14:57:00 GMT</pubDate><guid>http://www.cppblog.com/guaiguai/archive/2008/07/01/55076.html</guid><wfw:comment>http://www.cppblog.com/guaiguai/comments/55076.html</wfw:comment><comments>http://www.cppblog.com/guaiguai/archive/2008/07/01/55076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guaiguai/comments/commentRss/55076.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guaiguai/services/trackbacks/55076.html</trackback:ping><description><![CDATA[tuple<br>功能：<br>　　从函数中返回多个值<br>　　将相关的类型分组<br>Header: "boost/tuple/tuple.hpp"　tuple类模板和库的核心<br>Header: "boost/tuple/tuple_io.hpp"　tuple的输入输出操作<br>Header: "boost/tuple/tuple_comparison.hpp"　tuple的比较操作<br>成员函数<br>1.构造函数<br>&nbsp;&nbsp;&nbsp; tuple();<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; template &lt;class P1,class P2...,class PM&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tuple(class P1,class P2,...,PN); <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; template &lt;class U1,class U2,...,class UN&gt;<br>&nbsp;&nbsp;&nbsp; tuple(const tuple&lt;U1,U2,...,UN&gt;&amp;);<br><br>2.&nbsp; TIndex &amp; get&lt;int Index&gt;();<br>&nbsp;&nbsp;&nbsp; const TIndex &amp; get&lt;int Index&gt;() const;<br>&nbsp;&nbsp;&nbsp; 返回第Index个成份的引用。Index必须是整数，如果index大于tuple的元素总数产生编译错误。<br>3.&nbsp; tuple&amp; operator=(const tuple&amp; other);<br><br><br><br>template&lt;class T1,class T2,...,class TN&gt; tuple&lt;V1,V2,...,VN&gt; <br>&nbsp; make_tuple(const T1&amp; t1,const T2&amp; t2,...,const TN&amp; tn);<br>与std::make_pair类似<br><br>template&lt;class T1,class T2,...,class TN&gt; tuple&lt;T1&amp;,T2&amp;,...,TN&gt; <br>&nbsp; tie(T1&amp; t1,T2&amp; t2,...,TN&amp; tn);<br>tie(t1,t2,...,tn)等同于make_tuple(ref(t1),ref(t2)... ref(tn))<br><br>template &lt;int I,class T1,class T2,...,class TN&gt; <br>&nbsp; RI get(tuple&lt;T1,T2,...,TN&gt;&amp; t);<br>获得tuple t的一个元素。如果TI是一个引用类型，RI=TI,反之,RI=TI&amp;<br><br><br>相关操作<br>bool operator==(<br>&nbsp; const tuple&lt;T1,T2,...,TN&gt;&amp; lhs, <br>&nbsp; const tuple&lt;U1,U2,...,UN&gt;&amp; rhs);<br>bool operator!=(<br>&nbsp; const tuple&lt;T1,T2,...,TN&gt;&amp; lhs, <br>&nbsp; const tuple&lt;U1,U2...,...,&gt;&amp; rhs);<br>bool operator&lt;(<br>&nbsp; const tuple&lt;T1,T2,...,TN&gt;&amp; lhs, <br>&nbsp; const tuple&lt;U1,U2,...,UN&gt;&amp; rhs);<br><br>使用<br>如果元素是引用类型，用boost::ref。例如 boost::make_tuple(boost::ref(plain));<br>1.获得tuple的元素<br>#include &lt;iostream&gt;<br>#include &lt;string&gt;<br><br>#include "boost/tuple/tuple.hpp"<br><br>int main() {<br>&nbsp; boost::tuple&lt;int,double,std::string&gt; <br>&nbsp; triple(42,3.14,"The amazing tuple!"); <br><br>&nbsp; int i=boost::tuples::get&lt;0&gt;(triple);<br>&nbsp; double d=triple.get&lt;1&gt;();<br>&nbsp; std::string s=boost::get&lt;2&gt;(triple);<br>}<br><br>2.tie的使用<br>&nbsp; 不使用tie<br>&nbsp; boost::tuple&lt;int,int&gt; tup;<br>&nbsp; tup=gcd_lcm(12,18);<br>&nbsp; int gcd=tup.get&lt;0&gt;());<br>&nbsp; int lcm=tup.get&lt;1&gt;());<br><br>&nbsp; 使用<br>&nbsp; boost::tie(gcd,lcm)=gcd_lcm(15,20);<br><br>3.输出tuple<br><img src ="http://www.cppblog.com/guaiguai/aggbug/55076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guaiguai/" target="_blank">guaiguai</a> 2008-07-01 22:57 <a href="http://www.cppblog.com/guaiguai/archive/2008/07/01/55076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>boost:regex</title><link>http://www.cppblog.com/guaiguai/archive/2008/06/30/54990.html</link><dc:creator>guaiguai</dc:creator><author>guaiguai</author><pubDate>Mon, 30 Jun 2008 15:12:00 GMT</pubDate><guid>http://www.cppblog.com/guaiguai/archive/2008/06/30/54990.html</guid><wfw:comment>http://www.cppblog.com/guaiguai/comments/54990.html</wfw:comment><comments>http://www.cppblog.com/guaiguai/archive/2008/06/30/54990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/guaiguai/comments/commentRss/54990.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/guaiguai/services/trackbacks/54990.html</trackback:ping><description><![CDATA[regex<br>1.介绍<br>header:"boost/regex.hpp"<br>正则表达式是一个basic_regex的对象。<br><br>template &lt;class charT,class Allocator,class traits &gt;<br>&nbsp; bool regex_match(<br>&nbsp;&nbsp;&nbsp; const charT* str, <br>&nbsp;&nbsp;&nbsp; match_results&lt;const charT*,Allocator&gt;&amp; m,<br>&nbsp;&nbsp;&nbsp; const basic_regex&lt;charT,traits &gt;&amp; e,<br>&nbsp;&nbsp;&nbsp; match_flag_type flags = match_default);<br><br>regex_match决定一个正则表达式(参数e)是否匹配整个字符串str。主要用于确认文本。<br><br>template &lt;class charT,class Allocator, class traits&gt; <br>&nbsp; bool regex_search(<br>&nbsp;&nbsp;&nbsp; const charT* str,<br>&nbsp;&nbsp;&nbsp; match_results&lt;const charT*,Allocator&gt;&amp; m,<br>&nbsp;&nbsp;&nbsp; const basic_regex&lt;charT,traits &gt;&amp; e,<br>&nbsp;&nbsp;&nbsp; match_flag_type flags = match_default);<br><br>regex_search与regex_match相似，但它不要求整个字符串成功匹配。用来发现与正则表达式e匹配的子串。<br><br>template &lt;class traits,class charT&gt;<br>&nbsp; basic_string&lt;charT&gt; regex_replace(<br>&nbsp;&nbsp;&nbsp; const basic_string&lt;charT&gt;&amp; s,<br>&nbsp;&nbsp;&nbsp; const basic_regex&lt;charT,traits &gt;&amp; e,<br>&nbsp;&nbsp;&nbsp; const basic_string&lt;charT&gt;&amp; fmt,<br>&nbsp;&nbsp;&nbsp; match_flag_type flags = match_default);<br><br>regex_replace扫描字符串查找所有与正则表达式匹配的子串，并用参数fmt替代。<br><br><br><br>regex需要单独编译。<br><br>2.regex使用<br>&nbsp;首先声明一个basic_regex的变量。用来存储正则表达式。<br>　例如：boost:regex reg("(A.*)");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通配符.表示匹配任意字符。*表示它前面的表达式匹配零次或多次。＋表示前面的表达式至少出现一次。<br>　　　[abc]表示匹配a,b,c中的任意一个。也可写为[a-c]。匹配字母可写为[a-zA-Z]或\w。<br>　　　匹配2个数字或字符串&#8220;N/A&#8221; (\\d{2}|N/A)，｜用来分离可选项。<br>　　　\s 表示空格。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \n(n为数字) 表示引用前面的第n个表达式。("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1")　\1引用[a-zA-Z]+,两者必须匹配相同的字符串。<br>3.确认输入<br>&nbsp; 正则表达式最常见的用法是确认输入数据的格式。<br>　手动编写这样的代码是乏味的易错的，而且需要适应需求的变化。<br><br>4.查找<br>　match_results记录匹配后的位置，为下一次匹配作记录。<br>5.循环与贪婪<br>　避免贪婪匹配,在循环后加?<br>　&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "(.*)(\\d{2})"<br>&nbsp; "Note that I'm 31 years old, not 32."<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; "(.*?)(\\d{2})"<br><br>循环匹配<br>　1）*,+,{},?(单独使用，表示匹配零次或一次)。<br>　boost::regex reg1("\\d{5}");匹配5次<br>　boost::regex reg2("\\d{2,4}");匹配2,3，4次<br>　boost::regex reg3("\\d{2,}");匹配2次或2次以上<br>　2）＾用于匹配不是指定的字符。<br>　("[^13579]");匹配不是1,3，5,7，9的字符。<br><br>异常处理<br>　表达式不正确，执行时会抛出异常。<br><br><br> <img src ="http://www.cppblog.com/guaiguai/aggbug/54990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/guaiguai/" target="_blank">guaiguai</a> 2008-06-30 23:12 <a href="http://www.cppblog.com/guaiguai/archive/2008/06/30/54990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>