C++已经在中国相当普及,但C++ STL却使用的人不多。许多人有一定成见,认为STL降低了C++的效率。特别是那些自诩为技术专家的人,他们一直使用C语言,对于新事物总是先用批判的眼光对待......先不说这些,我这几天看见http://stl.winterxy.com网站上的这篇小文,发现写得简明扼要,通俗易懂。翻译出来,希望对STL的普及有一定帮助。
1 介绍我最开始结束C++编程是从DOS下的Borland C++开始的。那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东。当我开始使用Visual C++ 2.2的时候,我甚至试图去把Borland公司的collection模板库嵌入到Visual C++中去,但是没有成功。唯一可行的解决方案是切换到微软(Microsoft)的collection上,它是MFC的一部分分。但总是有些问题,其原因如下:
最近我开始使用STL,发现它真是太棒了!入门可能稍微难一些,但一旦你开始了,它就变得非常容易。本文包含了一些使用STL的入门经验,主要是面向那些希望能快速使用STL又不想了解那些琐碎细节的程序员。 2 规则Rule 1:你可以生成STL容器,用来存放对象或者指向对象的指针。 class TMyClass; typedef list<TMyClass> TMyClassList; // 用于存放对象的list容器 typedef list<TMyClass*> TMyClassPtrList; // 用于存放对象指针的list容器 如果容器是保存的对象,则在容器析构的时候会自动清理这些对象。但,如果它保存的是对象的指针,删除指针就应该是程序员的责任了。
Rule 2对需要保存到容器中的对象的类型来说,每个类都必须至少实现拷贝构造函数,最好还能重载赋值操作符。 class TMyClass {
private:
...
public:
TMyClass(..);
// 拷贝构造函数
TMyClass(const TMyClass& obj) { *this = obj; }
// 赋值操作符
TMyClass& operator=(const TMyClass& obj);
...
};
Rule 3:按照下列方式把一个对象插入到容器中: TMyClass object; TMyClassList myList; TMyClassList::iterator it; it = myList.insert(myList.end(), object); TMyClass *pObject = &(*it);
Rule 4:通过下面的方式,使用迭代器遍历整个容器: TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
pObject = &(*it);
// 使用 pObject
}TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
pObject = *it;
// 使用 pObject
}Rule 5:按照下面的方法可以删除容器中的元素: TMyClassList::iterator it;
TMyClass *pObject;
for (it = myList.begin(); it != myList.end(); it ++) {
pObject = &(*it);
if (pObject 满足某些删除的标注) then
myList.erase(it);
// 若list里面保存的是指针,那么增加下面代码
delete pObject;
} |
浙公网安备 33010602011771号