STL的介绍及queue,vector.doc
文本预览下载声明
STL简介
作为一个C++程序设计者,STL是一种不可忽视的技术。
Standard Template Library (STL):标准模板库,更准确的说是 C++ 程序设计语言标准模板库。STL是所有C++编译器和所有操作系统平台都支持的一种库,说它是一种库是因为,虽然STL是一种标准,也就是说对所有的编译器来说,提供给C++程序设计者的接口都是一样的。也就是说同一段STL代码在不同编译器和操作系统平台上运行的结果都是相同的,但是底层实现可以是不同的。 令人兴奋的是,STL的使用者并不需要了解它的底层实现。 试想一下,如果我们有一把能打开所有锁的钥匙,那将是多么令人疯狂啊。
STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什么。它被内建在你的编译器之内。
2.????? 为什么我们需要学习STL
STL是 C++的ANSI/ISO 标准的一部分,可以用于所有C++语言编译器和所有平台(Windows/Unix/Linux..)。STL的同一版本在任意硬件配置下都是可用的;
STL 提供了大量的可复用软件组织。例如,程序员再也不用自己设计排序,搜索算法了,这些都已经是STL的一部分了。嘎嘎,有意思吧。
使用STL 的应用程序保证了得到的实现在处理速度和内存利用方面都是高效的,因为STL设计者们已经为我们考虑好了。
使用STL编写的代码更容易修改和阅读,这是当然的啦。因为代码更短了,很多基础工作代码已经被组件化了;
使用简单,虽然内部实现很复杂。
虽然,STL的优点甚多,但是STL的语法实在令初学者人头疼,许多人望而却步。可是STL是每个C++程序设计者迟早都要啃的一块骨头。
3.????? 初识STL
下面让我们来看几段代码吧:
#include iostream
int main(void)
{
??? double a[] = {1, 2, 3, 4, 5};
??? std::coutmean(a, 5)std::endl;??? // will print 3
??? return 0;
}
好懂吧,除了那个std有点让人不舒服以外,这是一段普通的没有使用STL的C++代码。
再看下面一段:
#include vector
#include iostream
int main()
{
??? std::vectordouble a;
??? a.push_back(1);
??? a.push_back(2);
??? a.push_back(3);
??? a.push_back(4);
??? a.push_back(5);
??? for(int i = 0; i a.size(); ++i)
{
??????? std::couta[i]std::endl;
??? }
??? return 0;
}
如果你真的没有接触过STL的话,你会问,呀,vector 是啥呀?这是一段纯种的STL代码,看到尖括号了吧,知道那是模板了吧。看到a.push_back(5)、a.size()你不感觉奇怪么?可是我们并没有定义这些函数啊。
#include vector
#include iostream
int main()
{
??? std::vector int q;
??? q.push_back(10);
??? q.push_back(11);
??? q.push_back(12);
??? std::vector int v;
??? for(int i=0; i5; ++i){
??????? v.push_back(i);
??? }
??? std::vectorint::iterator it = v.begin() + 1;
??? it = v.insert(it, 33);
??? v.insert(it, q.begin(), q.end());
??? it = v.begin() + 3;
??? v.insert(it, 3, -1);
??? it = v.begin() + 4;
??? v.erase(it);
??? it = v.begin() + 1;
??? v.erase(it, it + 4);
??? v.clear();
??? return 0;
}
这一段你又看到了新东西了吧:iterator、insert、erase、clear。不罗嗦了,等你看完这篇文章,回头再看就简单了。
关于模板的其他细节,读者可以参阅《C++ Templates 中文版》在这里,简单的介绍一下模板类和函数模板的概念。
模板是C++中实现代码重用机制的一种工具,可以实现类型参数化,把类型定义为参数。函数模
显示全部