??xml version="1.0" encoding="utf-8" standalone="yes"?>
Z(jin)?j)进各部门员工的交流Q百度D办了(jin)一场全公司范围内的“拳皇”(癑ֺ内部最行的格斗游戏)(j)友谊赛,负责l织q场比赛的是癑ֺ的超U“拳皇”迷W.Z。W.Z不想用传l的淘汰赛或者@环赛的方式,而是自己制定?jin)一个比赛规则?
׃一些员工(比如同部门或者相邻部门员工)(j)qx接触的机?x)比较多Qؓ(f)?jin)?j)q不同部门之间的交流QW(xu).Z希望员工自由分组。不同组之间的每两个人都?x)进行一场友谊赛而同一l内的h之间不会(x)打Q何比赛?
比如4个hQ编号ؓ(f)1~4,如果分ؓ(f)两个lƈ?Q?一个组Q?Q?一个组Q那么一共需要打四场比赛Q? vs 3Q? vs 4Q? vs 3Q? vs 4?而如
果是1Q?Q?一l,4单独一l,那么一共需要打三场比赛 1 vs 4Q? vs 4Q? vs 4?
很快W.Z意识刎ͼq样的比赛规则可能会(x)让比赛的场数非常多。W.Z想知道如果有N个hQ通过上面q种比赛规则QL赛场数有可能为K场吗Q?
比如3个hQ如果只分到一l则不需要比赛,如果分到两组则需?场比?nbsp; 阅读全文
]]>
癑ֺ的工E师们是非常注重效率的,在长期的开发与试q程中,他们逐渐创造了(jin)一套独特的~略语。他们在qx的交谈、会(x)议,甚至在各U技术文档中都会(x)大量q用?
Z(jin)让新员工可以更快地适应癑ֺ的文化,更好地阅d司的技术文档,人力资源部决定开发一套专用的译pȝQ把相关文档中的~略语和专有名词译成日常语a?
输入要求Q?
输入数据包含三部分:(x)
1. W一行包含一个整数N(N<=10000)Q表Cd有多个~略语的词条Q?
2. 紧接着有N行的输入Q每行包含两个字W串Q以I格隔开。第一个字W串为羃略语Q仅包含大写英文字符Q长度不过10字节Q,W二个字W串为日常语aQ不包含I格Q长度不过255字节Q;
3. 从第N+2开始到输入l束为包含羃略语的相x档(总长度不过1000000个字节)(j)。例Q?
6
PS 门户搜烦(ch)?
NLP 自然语言处理
PM 产品?jng)场?
HR 人力资源?
PMD 产品推广?
M 阅读全文
]]>
]]>
]]>
]]>
1. |络?VC2005注意
2. 同步Timer
3. 异步Timer
4. 回调函数的参?br /> 5. 成员函数作ؓ(f)回调函数
6. 多线E回调同?br />
文章?a target="blank">
http://wiki.woodpecker.org.cn/moin/Boost
文章是用wiki写的Q有不妥大家可以直接Ҏ(gu)Q谢谢?img src ="http://www.shnenglu.com/zuroc/aggbug/13850.html" width = "1" height = "1" />
]]>
原文http://asio.sourceforge.net/boost_asio_0_3_7/libs/asio/doc/
译:张沈?http://blog.csdn.net/zuroc or http://www.shnenglu.com/zuroc
Timer.1 - 同步Timer
本章介绍asio如何在定时器上进行阻塞等?blocking wait).
实现,我们包含必要的头文g.
所有的asiocd以简单的通过include "asio.hpp"来调?
#include <iostream>
#include <boost/asio.hpp>
此外,q个CZ用到?jin)timer,我们q要包含Boost.Date_Time的头文g来控制时?
#include <boost/date_time/posix_time/posix_time.hpp>
使用asio臛_需要一个boost::asio::io_service对象.该类提供?jin)访问I/O的功?我们首先在main函数中声明它.
int main()
{
boost::asio::io_service io;
下一步我们声明boost::asio::deadline_timer对象.q个asio的核?j)类提供I/O的功?q里更确切的说是定时功能),L把一个io_service?/p>
象作Z的第一个构造函?而第二个构造函数的参数讑֮timer?x)?U后到时(expired).
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
q个单的CZ中我们演CZ(jin)定时器上的一个阻塞等?是?调用boost::asio::deadline_timer::wait()的在创徏?U内(注意:不是{待
开始后),timer到时之前不会(x)q回M?
一个deadline_timer只有两种状?到时,未到?如果boost::asio::deadline_timer::wait()在到时的timer上调??x)立即return.
t.wait();
最?我们输出理所当然?quot;Hello, world!"来演Ctimer到时?
std::cout << "Hello, world!\n";
return 0;
}
完整的代?
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!\n";
return 0;
}
译:张沈?http://blog.csdn.net/zuroc or http://www.shnenglu.com/zuroc
Boost.Asio是利用当代C++的先q方?跨^?异步I/O模型的C++|络?
入门
q个教程介绍?jin)客L(fng)-服务器端的一些基本概?同时l出?jin)一个示例的程?
程序可以启CBoost.Asio在复杂程序中的应?
附注
Boost.Asio的大部分功能没有必要~译B(ti)oost中的其他?仅仅需要它们的头文?然而read_until和async_read_until的重载需要Boost.Regex?注意:MSVC ?Borland C++的用户需要在用户讄中加?DBOOST_ALL_NO_LIB来防止与Boost.Date_Time和Boost.Regex的自动链?
需要OpenSSL才可以启用SSL支持,但Asio的其他部分不需要它.
已经试的^台和~译?
* Win32 using Visual C++ 7.1 and Visual C++ 8.0.
* Win32 using Borland C++Builder 6 patch 4.
* Win32 using MinGW.
* Win32 using Cygwin. (__USE_W32_SOCKETS must be defined.)
* Linux (2.4 or 2.6 kernels) using g++ 3.3 or later.
* Solaris using g++ 3.3 or later.
* Mac OS X 10.4 using g++ 3.3 or later.
* QNX Neutrino 6.3 using g++ 3.3 or later.
原理:
Boost.Asio可以让程序员用C++的程序体pd代那U需要用system底层操作的网l编E?特别的值得注意的是,Boost.Asio试图解决一下一些问?
*可移植?
库可以支持ƈ提供一pd常用操作pȝ的一致行?
*可测量?
库允许ƈ鼓励开发者在|络~程中检成百或成千q发的连接数.库在各个q_的实现要用这U机制来最优的实现q种可测量?
*效率:
库要支持 分散-聚合I/O(scatter-gather I/O) 之类的技?允许协议?最量(minimise) 的数据交?
*伯克?Berkeley) sockets模型:
该模型的API被广泛的采用和理?被许多文献介l?其他E序语言通常使用cM|络API的接?
*易用:
降低新手使用该工L(fng)入门障碍,胜于框架和模?也就是说,试图最化前端的学习(fn),仅仅需要理解一些基本规则和指导斚w.此外,库的用户仅需要理解用到的特定函?
*可以作ؓ(f)q一步抽象的基础:
库应该允许其他库的开发者进行更高层的抽?比如:实现常用的协议Http.
管当前的Boost.Asio的实C要关注的是网l?但异步I/O可以被扩展到其他pȝ资源,比如 文g.
文末q篇Email?006-03-22?而今天已l?006-8-5日了(jin),我看到asio的soureforge的主上?
20 June 2006 - asio version 0.3.7 (development) released.
This release includes major interface changes arising out of the Boost review of asio.
The asio library was accepted into Boost and will appear in a future Boost release.
不过Boost release到现在还?/p>
boost 1.33.1 December 5, 2005.
asio不知道还要等C么时候才在Boost release攑և,真是望穿U水?
C++0x标准也是q样,{就一个字.
由此而观,国外C++C真是心(j)谨慎,E_W一,在他们的理念中C++更类g一件艺术品.反观Java,.Net的日新月?可以说是功能W一,方便W二,速度W三.商业与学院的区别真是不L自明.
而在我的理念?对于面向普通桌面用?不是专业/行业软g)的由于功能的cM(即你有一个很有创意的软g,不出几天׃(x)有Y件的ȝ),界面和速度可能是生存的关?对与C++的Guiq一?我感觉是极端不适应(也许是我水^太差),q而firefox和Google的一些小E序提供有了(jin)一U新的界面思\:一个后台服?一个微型web服务?|页界面.利用Ajax技术可以写出很好界面来(我写?jin)一个默写单词Y件网늕面的试验?兼容firefox和IE6,下蝲地址:
http://groups.google.com/group/go2program/browse_thread/thread/5ee588253b70df77
中的附g source.rar
)
所有在cpp@codingnow.com中高人的指点下我知道?jin)asio.从而有?jin)上面这些感?
下面是我译的关于宣布asio成ؓ(f)boost一员的Email,q是我第一ơ逐字逐句的翻?水^有限(6U没q?,望多指教.
原文:Jeff Garland
译:张沈?http://blog.csdn.net/zuroc or http://www.shnenglu.com/zuroc
大家?
我很高兴的宣布asio(?|络?正式成ؓ(f)boost库的一?正如其他Boost库的审查一?asio的审查生了(jin)许多的讨?观点和争?评h(hun)归结于赞?包括在工E中成功q用的例?严肃?库结?设计斚w的意?公^的说,在我看来,asio是了(jin)一个通用,可靠的库,已经可以被加入Boost?-提供?jin)开发者强烈要求的关键领域的应?
当然,一如往?asioq谈不上完美--不少关键性的问题q次审评q没有考虑.在此我仅列D审评中许多的意见中的一部分:
- 修正动态内存分配的问题
- 更改接口以在q行时ipv4和ipv6的无~切?br /> - 改进以适应强类型的socket接口(????什么意?请高手指?
Chris已经L(fng)?jin)大量关于动态内存分的配解决Ҏ(gu),q且我会(x)接口和其他斚w的问题在Boost的邮件列表上q行跟踪讨论以期能尽善尽?
其他可以作ؓ(f)q一步增强重要的改进包括:
- 可能减c风格的接?br /> - 和iostreamq一步的整合
- 性能优化
- 改进文档(不要成ؓ(f)Boost w/o this one //???怎么译)
Chris has a much longer list of changes garnered from the review and is well on his way to addressing many of them.
Chris有着一个更长的针对审评意见的改q计划表,同时他与者有着很好的连l?
注意,有几个讨论是关于性能?q是asio所涉及(qing)领域的核?j)问?其中一个就是上面提到的动态内存分?一般而言,审评者对此的期望很高.然?在审评讨Z?在我的印象中许多开发者发现asio只要改进内存分配,它的表现已l够胜任重要的工程.(?我希望Chris在开发asio余下的时间里,可以采纳审评者的一些其他方面的性能意见.
再一ơ我为BoostC延迟公布审评l果而抱?q次推迟完全是由于我的时间安排问?与asio无关.再次感谢所有的审评者的贡献,其向Chris为Boostdasio而作出的巨大努力致敬.
原文:
From: Jeff Garland
All -
I'm pleased to announce that asio has been accepted into Boost. As usual with a Boost review, the asio review generated plenty of discussion, issues, and controversy. Comments ranged from high praise,including success stories of projects in production, to serious design concerns and issues. On balance, in my judgment, asio provides a generally solid library that is ready for inclusion into the Boost library -- providing key functionality in an area that developers have a strong need.
Of course, like anything else, asio is not perfect -- a number of key issues were uncovered during the review. In terms of required changes I'm only going to cite a few:
- Fixes to dynamic memory allocation issues
- Interface changes to support ipv4 and ipv6 seamlessly at runtime
- Improvements to support strongly typed socket interfaces
Chris has communicated a couple possible solutions to the memory allocation issue and I'll ask that the interface and other changes for this issue continue to be discussed on the Boost list so consensus can be achieved on the best resolution.
Other key improvements that should be explored as future enhancements include:
- Possible removal of some of the c-style interfaces
- Exploration of higher level iostream integrations
- Performance improvements
- Improved documentation (wouldn't be Boost w/o this one)
Note that there were several threads and discussions about performance,which is particularly critical for the domain covered by asio. One of the performance issues is the dynamic memory allocation issue cited above. In general, the reviewers have extremely high expectations here. However, after reviewing the discussion and library it's my belief that
many developers will find asio performance sufficient to build significant projects with only the memory allocation changes. I expect Chris will be able to address some of the other performance issues cited by reviewers in asio over time.
Once again I'll apologize to the Boost community for the delay in the review results. The delay was entirely due to my own personal scheduling issues and should not reflect on asio in any way. Thanks again to all the reviewers for their effort and especially to Chris for his tremendous effort in bringing asio to Boost!
Jeff
# PROFILE can be set to YES to include profiling info, or NO otherwise
PROFILE := NO
# TINYXML_USE_STL can be used to turn on STL support. NO, then STL
# will not be used. YES will include the STL files.(使用STL,选择的话Q则可以使用std::string)
TINYXML_USE_STL := YES
另外可以tinyxml_guide.zip可以下蝲.
以下转蝲:
TinyXml学习(fn)W记
张弛<zhangchi@china.com>
一、 ?TinyXml的特?
TinyXml是一个基于DOM模型的、非验证的轻量C++解释器?/p>
1. SAX和DOM
目前XML的解析主要有两大模型QSAX和DOM?/p>
其中SAX是基于事件的Q其基本工作程是分析XML文档Q当发现?jin)一个新的元素时Q生一个对应事Ӟq调用相应的用户处理函数。这U方式占用内存少Q速度快,但用L(fng)序相应得?x)比较复杂?/p>
而DOMQ文档对象模型)(j)Q则是在分析Ӟ一ơ性的整个XML文档q行分析Qƈ在内存中形成对应的树(wi)l构Q同Ӟ向用h供一pd的接口来讉K和编辑该?wi)结构。这U方式占用内存大Q速度往往慢于SAXQ但可以l用h供一个面向对象的讉K接口Q对用户更ؓ(f)友好?/p>
2. 验证和非验证
对于一个特定的XML文档而言Q其正确性分Z个层ơ。首先是其格式应该符合XML的基本格式要求,比如W一行要有声明,标签的嵌套层ơ必d后一致等{,W合q些要求的文Ӟ是一个合格的XML文gQ称作well-formatted。但除此之外Q一个XML文档因其内容的不同还必须在语义上W合相应的标准,q些标准q应的DTD文g或者Schema文g来定义,W合?jin)这些定义要求的XML文gQ称作valid?/p>
因此Q解析器也分ZU,一U是验证的,即会(x)跟据XML文g中的声明Q用相应的DTD文g对XML文gq行校验Q检查它是否满DTD文g的要求。另一U是忽略DTD文gQ只要基本格式正,可以进行解析?/p>
我所知,验证的解析器通常都是比较重量U的。TinyXml不支持验证,但是体积很小Q用在解析格式较为简单的XML文gQ比如配|文件时Q特别的合适?/p>
二?TinyXml的构建和使用
1. 获取
TinyXml首页在http://www.grinninglizard.com/tinyxml/index.htmlQ从q里可以扑ֈ最新版本的源代码,目前的版本是2.3.4?/p>
2.构徏
TinyXml在构建时可以选择是否支持STLQ选择的话Q则可以使用std::stringQ所以通常应该打开q个选项?/p>
在Windows上,TinyXml的源码包里提供了(jin)VC6的工E文Ӟ直接用它?yu)可以生成两个?rn)态库Q带STL和不带STLQ,非常Ҏ(gu)。唯一需要注意的是,默认生成的库是单U程的,如果用在多线E的目中,需要改动一下配|,生成相应的多U程库?/p>
在Unixq_上,TinyXml的源码包里只提供?jin)一个MakefileQ对于典型的LinuxpȝQ或装了(jin)gcc和gmake的其他UnixQ这个Makefile_用了(jin)Q我在RH9和RHEL4上测试,单的make成功了(jin)。需要注意的有以下几点:(x)默认的编译是不支持STL的,可以通过~辑Makefile的TINYXML_USE_STL := NO那一行,把NOҎ(gu)YES可以支持STL?jin);q有默认只生成了(jin)一个测试程序,没有生成M库,如果要生成静(rn)态库的话Q可以用ar命o(h)Q将生成的几个目标文件打包就行了(jin)Q如果要生成动态库Q则需要加?fpic参数重新~译?/p>
3. 使用
构徏?jin)相应的库之后,在用?jin)它们的工E中Q只要在q接时把他们q上p?jin)。需要注意的是,如果需要STL支持Q在~译用到?jin)TinyXml的文件时Q需要定义一个宏TIXML_USE_STLQ对gccQ可以用参?DTIXML_USE_STLQ对cl.exeQVCQ,可以使用参数/DTIXML_USE_STLQ如果嫌ȝ(ch)Q可以直接定义在 tinyxml.h文g里?/p>
三?TinyXml的编E模?. cM间的关系
TinyXml实现的时DOM讉K模型Q因此提供了(jin)一pd的类对应XML文g中的各个节点。主要类间的关系如下图所C:(x)
TiXmlBaseQ其他类的基c,是个抽象c?/p>
TiXmlNodeQ表CZ个节点,包含节点的一般方法,如访问自节点、兄弟节炏V编辑自w、编辑子节电(sh)
TiXmlDocumentQ表C整个XML文档Q不对应其中某个特定的节炏V?/p>
TiXmlElementQ表C元素节点,可以包含子节点和TiXmlAttribute
TiXmlCommentQ表C注?/p>
TiXmlDeclarationQ表C声?/p>
TiXmlTextQ表C文本节?/p>
TiXmlUnknownQ表C未知节点,通常是出错了(jin)
TiXmlAttributeQ表CZ个元素的属?/p>
下面是一个简单的例子Q?/p>
<?xml version="1.0" encoding="utf-8" ?>
<!-This is only a sample-->
<book>
<name>TinyXml How To</name>
<price unit=”RMB?gt;20</price>
<description>Some words?lt;/description>
</ book >
整个文档Q对应TiXmlDocument
book,name,price, descriptionQ都对应TiXmlElement
W一行对应一个TiXmlDeclaration
W二行对应一个TiXmlComment
“TinyXml How To”对应一个TiXmlText
unit则是price的一个TiXmlAttribute
q些cMXML文g中的相应元素都有很好的对应关p,因此怿参照TinyXml的文档,可以很容易的掌握各个Ҏ(gu)的用?/p>
2. 需要注意的问题
各类之间的{?
׃各个节点c都从TiXmlNodel承Q在使用时常帔R要将TiXmlNode*cd的指针{换ؓ(f)其派生类的指针,在进行这U{换时Q应该首先用由TiXmlNodecL供的一pd转换函数Q如ToElement(void)Q而不是c++的dynamic_cast
(g)查返回?
׃TinyXml是一个非校验的解析器Q因此当解析一个文件时Q很可能文gq不包含我们预期的某个节点,在这U情况下QTinyXml返回空指针。因此,必须要对q回D行检查,否则很Ҏ(gu)出现内存讉K的错误?/p>
如何重头建立一个XML文g
先徏立一个TiXmlDocument对象Q然后,载入某个模板Q或者直接插入一个节点作为根节点Q接着可以像打开一个已有的XML文g那样对它q行操作?jin)?/p>
四、ȝ
TinyXml最大的特点是它很,可以很方便的?rn)态连接到E序里。对于像配置文g、简单的数据文gq类文g的解析,它很适合。但是由于它是非验证的,因此需要在E序里做许多(g)查工做,加重?jin)程序编写的负担。因此对于复杂的XML文gQ我觉得最好还是用验证的解析器来处理?br />Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=477335
《程序员Q在路上……?
W??-- 用OPENGLd麦克斯维速率分布曲线