什么原因,我总是记不住POSITIONs的使用方法,每次总是要去查手册,而begin/end 和 i++语法对我来说轻车熟路。另一方面,我希望STL有一个转换函数用于将string转成LPCTSTR,就像CString那样:
CString s; // MFC
LPCTSTR pstr = s; // 调用 "CString::operator LPCTSTR() const;"
MFC的转换函数很棒,使用它可以将某个CString传到任何可以传指针的的C串中。可以让你写如下的代码:
CString s = "whatever";
MyFunc(s); // MyFunc 想要 LPCTSTR
而如果使用STL,你必须显式地调用string::c_str.
string s;
MyFunc(s.c_str());
也许STL的设计者认为转换函数容易引起混乱,确实是这样,正是因为如此才造就了整个STL设计。每次只要已涉及到STL代码就犯难,主要的问题是类型。使用STL的一个更重要的理由当然是可移植性。STL是C++标准的一部分,就像printf,,tolower,strcpy等是C标准的一部分一样。我总是感觉到可移植性有一些问题,因为大多数程序它依赖于平台。其它操作系统有
SHFileOperation吗?没有。然而,尽可能将平台依赖程度降至最小,STL能帮你做到。任何想要与ANSI兼容的编译器必须支持STL。但这种支持并不总是充分和成功。尤其是微软将STL看成一种负担,而不是把它当成一种好技术来对待。这显然是非常不明智的。
另一方面,公正地讲,STL确实很神秘,表现在其内容划分、发生器以及容器等方面。并且它的模板代码总是让人不可接近(有点像ATL),阅读STL代码对所有人都是个严重的挑战。但Unix程序员可能体会到了STL所包含的东西,如果你熟悉了STL的那些单调乏味的术语,意想不到的函数名以及高度概括的代码,如果你能驾驭它们,那种感觉好极了。不久你就会融入到其中并发现STL的功能是多么强大,并且易于使用。STL遵循Unix的系统惯例,象SED,AWK和Emacs——难于学习,但功能强大并易于使用(我坦白承认打死都不会用Emacs)。如
果你真想做一些低级编程,那就认识STL吧!哪里能找到更多的有关STL的内容呢?网络上有很多关于STL的站点。只要用“Standard Template Library”或“STL”来搜索就可以找到一大把。最有名的一个站点是:
/Technology/STL/index.html
你可以从上面找到容易理解文档和FAQ页面。
最后祝你编程愉快!