2008年7月1日

boost:tuple

tuple
功能:
  从函数中返回多个值
  将相关的类型分组
Header: "boost/tuple/tuple.hpp" tuple类模板和库的核心
Header: "boost/tuple/tuple_io.hpp" tuple的输入输出操作
Header: "boost/tuple/tuple_comparison.hpp" tuple的比较操作
成员函数
1.构造函数
    tuple();
 
    template <class P1,class P2...,class PM>
      tuple(class P1,class P2,...,PN);
   
    template <class U1,class U2,...,class UN>
    tuple(const tuple<U1,U2,...,UN>&);

2.  TIndex & get<int Index>();
    const TIndex & get<int Index>() const;
    返回第Index个成份的引用。Index必须是整数,如果index大于tuple的元素总数产生编译错误。
3.  tuple& operator=(const tuple& other);



template<class T1,class T2,...,class TN> tuple<V1,V2,...,VN>
  make_tuple(const T1& t1,const T2& t2,...,const TN& tn);
与std::make_pair类似

template<class T1,class T2,...,class TN> tuple<T1&,T2&,...,TN>
  tie(T1& t1,T2& t2,...,TN& tn);
tie(t1,t2,...,tn)等同于make_tuple(ref(t1),ref(t2)... ref(tn))

template <int I,class T1,class T2,...,class TN>
  RI get(tuple<T1,T2,...,TN>& t);
获得tuple t的一个元素。如果TI是一个引用类型,RI=TI,反之,RI=TI&


相关操作
bool operator==(
  const tuple<T1,T2,...,TN>& lhs,
  const tuple<U1,U2,...,UN>& rhs);
bool operator!=(
  const tuple<T1,T2,...,TN>& lhs,
  const tuple<U1,U2...,...,>& rhs);
bool operator<(
  const tuple<T1,T2,...,TN>& lhs,
  const tuple<U1,U2,...,UN>& rhs);

使用
如果元素是引用类型,用boost::ref。例如 boost::make_tuple(boost::ref(plain));
1.获得tuple的元素
#include <iostream>
#include <string>

#include "boost/tuple/tuple.hpp"

int main() {
  boost::tuple<int,double,std::string>
  triple(42,3.14,"The amazing tuple!");

  int i=boost::tuples::get<0>(triple);
  double d=triple.get<1>();
  std::string s=boost::get<2>(triple);
}

2.tie的使用
  不使用tie
  boost::tuple<int,int> tup;
  tup=gcd_lcm(12,18);
  int gcd=tup.get<0>());
  int lcm=tup.get<1>());

  使用
  boost::tie(gcd,lcm)=gcd_lcm(15,20);

3.输出tuple

posted @ 2008-07-01 22:57 guaiguai 阅读(676) | 评论 (0)编辑 收藏

2008年6月30日

boost:regex

regex
1.介绍
header:"boost/regex.hpp"
正则表达式是一个basic_regex的对象。

template <class charT,class Allocator,class traits >
  bool regex_match(
    const charT* str,
    match_results<const charT*,Allocator>& m,
    const basic_regex<charT,traits >& e,
    match_flag_type flags = match_default);

regex_match决定一个正则表达式(参数e)是否匹配整个字符串str。主要用于确认文本。

template <class charT,class Allocator, class traits>
  bool regex_search(
    const charT* str,
    match_results<const charT*,Allocator>& m,
    const basic_regex<charT,traits >& e,
    match_flag_type flags = match_default);

regex_search与regex_match相似,但它不要求整个字符串成功匹配。用来发现与正则表达式e匹配的子串。

template <class traits,class charT>
  basic_string<charT> regex_replace(
    const basic_string<charT>& s,
    const basic_regex<charT,traits >& e,
    const basic_string<charT>& fmt,
    match_flag_type flags = match_default);

regex_replace扫描字符串查找所有与正则表达式匹配的子串,并用参数fmt替代。



regex需要单独编译。

2.regex使用
 首先声明一个basic_regex的变量。用来存储正则表达式。
 例如:boost:regex reg("(A.*)");
       通配符.表示匹配任意字符。*表示它前面的表达式匹配零次或多次。+表示前面的表达式至少出现一次。
   [abc]表示匹配a,b,c中的任意一个。也可写为[a-c]。匹配字母可写为[a-zA-Z]或\w。
   匹配2个数字或字符串“N/A” (\\d{2}|N/A),|用来分离可选项。
   \s 表示空格。
      \n(n为数字) 表示引用前面的第n个表达式。("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1") \1引用[a-zA-Z]+,两者必须匹配相同的字符串。
3.确认输入
  正则表达式最常见的用法是确认输入数据的格式。
 手动编写这样的代码是乏味的易错的,而且需要适应需求的变化。

4.查找
 match_results记录匹配后的位置,为下一次匹配作记录。
5.循环与贪婪
 避免贪婪匹配,在循环后加?
                   "(.*)(\\d{2})"
  "Note that I'm 31 years old, not 32."
       "(.*?)(\\d{2})"

循环匹配
 1)*,+,{},?(单独使用,表示匹配零次或一次)。
 boost::regex reg1("\\d{5}");匹配5次
 boost::regex reg2("\\d{2,4}");匹配2,3,4次
 boost::regex reg3("\\d{2,}");匹配2次或2次以上
 2)^用于匹配不是指定的字符。
 ("[^13579]");匹配不是1,3,5,7,9的字符。

异常处理
 表达式不正确,执行时会抛出异常。


posted @ 2008-06-30 23:12 guaiguai 阅读(1190) | 评论 (0)编辑 收藏

2008年5月7日

BCG中英文菜单转换

注释掉SetRegistryBase()

posted @ 2008-05-07 17:35 guaiguai 阅读(513) | 评论 (0)编辑 收藏

2008年5月6日

[转]tinyxml简介

TinyXML简介

TinyXML是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作,尤其适用于游戏开发,在Nebula2CEGUI等开源项目中都有使用。本文的目的就是把这个好东东分享给大家:)

 

关于DOMSAX

DOM - Document Object Model

将整篇XML文档一次性解析并读入内存,保存为一个对象供用户访问。

SAX - Simple API for XML

SAXXML解析方式是基于事件回调的,解析器在每遇到一个XML元素时都会产生一个事件,并执行由用户提供的处理函数。

 

 TinyXML类结构

 

[TiXmlBase] 所有TinyXML类的基类,保存该结点或属性在XML原文中的信息。

[TiXmlAttribute] XML结点属性,一个键值对

[TiXmlNode] XML结点的基类,封装了对XML文档树形结构进行操作和维护的方法

[TiXmlComment] XML注释结点

[TiXmlDeclaration] XML声明结点

[TiXmlDocument] XML文档结点(一般为一篇XML文档的根结点)

[TiXmlElement] XML结点

[TiXmlText] XML文本结点

[TiXmlUnknown] 含有未知标签的XML结点

[TiXmlHandle] 封装了一个结点的指针,在对该指针进行查询时将自动进行空指针交验

[TiXmlVisitor] 遍历器接口,描述了每个节点的处理方法,由子类实现

[TiXmlPrinter] Printer遍历器

 

 读取XML文件

TiXmlDocument doc("test.xml");

doc.LoadFile("test.xml");

 

写入XML文件

TiXmlDocument doc;

……

doc.SaveFile("test.xml");

 

 遍历XML文档

首先以FirstChild获得第一个自节点,然后以NextSibling获取下个兄弟节点;如此递归遍历所有节点即可。

TiXmlNode::FirstChild();

TiXmlNode::NextSibling();

 

构造XML文档

将指定节点插入当前节点子节点队列的末尾

TiXmlNode::LinkEndChild();

设置指定节点的属性

TiXmlElement::SetAttribute();

TiXmlElement::SetDoubleAttribute();

tinyxml官方主页 http://www.grinninglizard.com/tinyxml/
在线文档 http://www.grinninglizard.com/tinyxmldocs/index.html

posted @ 2008-05-06 22:17 guaiguai 阅读(840) | 评论 (0)编辑 收藏

2008年4月29日

五月计划

分析lua 源代码
读head first pattern disign


posted @ 2008-04-29 23:03 guaiguai 阅读(337) | 评论 (0)编辑 收藏

仅列出标题  
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜