1,STL简介
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称<wbr></wbr>。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。
STL的代码从广义上讲分为三类:algorithm(算法)<wbr></wbr>、container(容器)和iterator(迭代器)<wbr></wbr>,几乎所有的代码都采用了模板类和模版函数的方式<wbr></wbr>,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会<wbr></wbr>。在C++标准中,STL被组织为下面的13个头文件:<wbr></wbr><algorithm>、<deque>、<functional<wbr></wbr>>、<iterator>、<vector>、<list>、<wbr></wbr><map>、<memory>、<numeric>、<wbr></wbr><queue>、<set>、<stack>和<utility<wbr></wbr>>。
2,游戏开发中使用STL
STL针对C++开发过程中的典型而且常用的问题进行实现<wbr></wbr>,在游戏开发中则会大量遇到STL所解决的问题,所以能够熟练的掌<wbr></wbr>握STL能够大幅度提高游戏的开发进度;
《c++标准程序库》(<The c++ standard library>)是广为流传的讲述STL使用的书;
而且对于在校的学生来说,STL的使用更是面试必遇的问题;
3,using STL with source code and profiler
在使用STL的过程中需要去阅读STL的代码,在写下每个调用时<wbr></wbr>,最好清楚这些都意味着什么,糟糕的使用会带来巨大的资源消耗甚至<wbr></wbr>莫名其妙的结果;
Use STL instead of being used;
同时需要一些profiler来评测你的程序效率<wbr></wbr>,不管一个coder的知识多么渊博,经验多么丰富<wbr></wbr>,在实际数据和测试评测面前都需要保持谦卑;
当对STL的使用变得熟练而且思绪变得清晰,结果即让开发过程变得<wbr></wbr>迅捷也让程序跑的飞快的时候,STL的美妙才开始展现;
另外一方面STL主要用template实现来获得良好的通用性和<wbr></wbr>效率,同时代码也非常简洁,这也正是template的优势<wbr></wbr>,template越来越受游戏开发者的喜爱,
而阅读stl代码绝对是学习template极佳的途径<wbr></wbr>,这个过程甚至会影响你的编程风格和对c++的理解;
<MODERN C++ DESIGN GENERIC PROGRAMMING AND DESIGN PATTERNS APPLIED>是有关template非常优秀的书;
4,STL&Kiss
Kiss==Keep it simple and stupid
简洁之美贯穿于coder的思考方式和代码风格中<wbr></wbr>,而在开发游戏过程中,广大developers奉行这样的步骤:
1,make it work
2,make it fast
3,make it beautiful
如果在可以熟练高效的使用STL之后,却时刻下意识的去追求STL<wbr></wbr>的功能和效率也有矢合理;
最好淳朴而合理的使用STL;
在coding的开始阶段,我们需要的是尽快把功能实现<wbr></wbr>,STL所办演的是"实现加速器"和"脑力解放"的角色<wbr></wbr>,倾泻STL代码让别人去说吧!!!
feature实现好之后进入优化阶段,此时我们对code的理解<wbr></wbr>更加深刻细致,加上profiler的评测结果和对STL的了解<wbr></wbr>,优化更具针对性,有的放矢的感觉就是好!!
恩恩,我们奉行简洁的原则,我们驾驭STL;
5,自己实现STL?
的确目前大型商业游戏引擎几乎都带有自己的STL实现<wbr></wbr>,是不是意味着在一个项目的成长之路上也要经历STL的自我实现的<wbr></wbr>过程呢?
恩,首先我们需要了解为什么要重新实现STL;
1,效率&通用性:对于面向多个平台的游戏来说,各个平台的STL<wbr></wbr>实现很有可能不一样,进而带来效率的差异,普通的STL的通用性也<wbr></wbr>牺牲了它的一些性能
game coder们到一定程度就难以忍受这些,"我们需要更强有力的控制<wbr></wbr>,更快的速度,我们要为自己量身定做这些基础设施";
<script type="text/javascript"><!--
D(["mb","<br>2,扩展性:STL所提供的功能根本满足不了引擎的需要<WBR>,大量的类似STL的基础代码被开发,这时候自己实现STL并不停<WBR>的扩展也就自然而然了;</p>/n<p>所以针对自己实现STL这个问题:自然最好;</p>/n<p>当项目开发处于低级阶段:<br>@对于功能更加强大的基础代码的要求并没有那么强烈,or<br>@引擎的优化不够成熟,仍旧有优先级更高的优化和实现工作要做<WBR>,or<br>@只对单一平台开发,基于普通STL扩展即可</p>/n<p>大可把注意力集中在其他地方,在必要的时候再着手"发明这个轮子"</p>/n<p>当项目的确在需要更高的效率,更好的移植性,更好的扩展的时候<WBR>,我们仍旧需要考虑:<br>开发的工作量和难度,<br>测试的工作量和项目进度,<br>在相当长时期内,潜在的给项目带来的不稳定性;</p>/n<p>这些都OK的时候,剩下的就是享受编程了哦 ^_^</p>/n",0]
);
D(["ce"]);
//--></script>
2,扩展性:STL所提供的功能根本满足不了引擎的需要<wbr></wbr>,大量的类似STL的基础代码被开发,这时候自己实现STL并不停<wbr></wbr>的扩展也就自然而然了;
所以针对自己实现STL这个问题:自然最好;
当项目开发处于低级阶段:
@对于功能更加强大的基础代码的要求并没有那么强烈,or
@引擎的优化不够成熟,仍旧有优先级更高的优化和实现工作要做<wbr></wbr>,or
@只对单一平台开发,基于普通STL扩展即可
大可把注意力集中在其他地方,在必要的时候再着手"发明这个轮子"
当项目的确在需要更高的效率,更好的移植性,更好的扩展的时候<wbr></wbr>,我们仍旧需要考虑:
开发的工作量和难度,
测试的工作量和项目进度,
在相当长时期内,潜在的给项目带来的不稳定性;
这些都OK的时候,剩下的就是享受编程了哦 ^_^
本文介绍了STL(标准模板库)的概念及其在游戏开发中的重要作用。STL由算法、容器和迭代器组成,通过模板类和函数提供代码重用。文章探讨了如何高效使用STL,并分析了在特定情况下自行实现STL的可能性。
4269

被折叠的 条评论
为什么被折叠?



