(1)STL 是 C++ 标准程序库的核心。STL 内全部组件都由模板构成,其元素能够是任意类别。ios
(2)STL译为标准模板库。STL从根本上讲是“容器”的集合,也是组件的集合。算法
容器包括:list、vector、set、map等,组件包括迭代器、算法等。编程
(3)STL的算法是标准算法,能够把STL已经定义的算法应用在容器的对象上。数组
STL 的组件中最主要的是容器、迭代器、算法和仿函数。数据结构
(1)容器:用来管理某类对象的集合函数
(2)迭代器:用来在一个对象群集的元素上进行遍历动做工具
(3)算法:用来处理群集内的元素学习
STL 是 C++ 通用库,由容器、算法、迭代器、仿函数和内存配置器组成。spa
Vector<T>,是一种向量设计
List<T>,是一种双向链表容器
Queue<T>,是一种队列容器
Stack<T>,是一种栈容器
Deque<T>,是双端队列容器
Set<T>,是一种集合容器
Map<key,val>,是一种关联数组容器
STL提供了很是多的数据结构算法。
这些算法在命名空间std的范围内定义,经过包含头文件<algorithm>来得到使用权。
STL中全部的算法都是基于模板实现的。
通俗的讲,迭代器就是指示器,可以使程序反复对数据进行访问,为访问数据提供了通用的接口,相似于C++的指针。包括:
a、输入迭代器:为程序须要的数据源提供接口,只能从一个序列读取数值,可修改可引用
b、输出迭代器:只能向一个序列写入数据,可修改,可引用
c、双向迭代器:可读可写,可进行前项、后项操做
d、随机接入迭代器:可经过跳跃的方式访问任意数据,是功能最强大的迭代器
STL包含了大量仿函数。仿函数能够理解为函数的通常形式。仿函数有几种不一样的约束,对于编程来讲,仿函数很是重要。
在标准C++规范中,函数调用通常使用指针,当须要调用函数时,只须要告诉函数的地址便可。
STL包括了底层的内存分配和释放。
STL提供3种容器配接器
a、Statck<Container>
b、Queue<Container>
c、Deque<Container>
示例代码:
#这里以stack为例,运行环境:CFree(比VS轻量,运行速度快,学习算法推荐使用这个工具) #include <iostream> #include <stack> using namespace std; int main(){ //定义堆栈对象 stack<int> st; for(int i=0;i<10;i++){ //将数据压入堆栈 st.push(i); } while(!st.empty()){ //若是st非空便可持续访问其中的数据 //弹出堆栈第一个元素并输出 cout<<st.top()<<" "; //弹出堆栈元素 st.pop(); } cout<<endl; //任意键退出 cin.get(); }
运行结果:
优势:
(1)代码易读性强;
(2)STL集成了优秀的算法,熟悉使用能够提升开发效率;精通STL后,能够本身用模板去设计实现本身的算法和数据结构。
缺点:
(1)STL和其余的类库的接口不太方便;
例如在VCL和MFC中,都有本身的string类型,CString和AnsiString,其他接口若是使用字符串,确定是使用本身的原生类型,然而为了设计可移植的程序,有可能将平台独立的部分用STL实现,这样致使了在两部分合做时存在大量的转型动做,并且必须付出额外的转型动做,例如std::string和CString/AnsiString没有直接的转型方法,所以必须经过char *做为转型的媒介。
(2)STL没有提供object persistent.(?)
查语法错误不方便,因为普遍使用模板,编译器的提示信息老是千奇百怪,让人摸不找头脑。调试极不方便,Watch窗口的监视功能等于虚设.还要本身编写代码来查看容器内容.尤为是跟踪到STL内部以后,更让人晕头转向。
五、编程概述
#以矢量Vector为例 #include <iostream> #include <vector> using namespace std; //使用命名空间std //定义矢量对象 vector<int> ratings(5); int n; int main(){ //输入矢量的大小 cin>>n; //定义矢量动态内存 vector<double>scores(n); }
#include <iostream> #include <vector> #include <string> using namespace std; //使用命名空间std const int NUM=5; //定义矢量对象 /* vector<int> ratings(5); int n; */ int main(){ /* //输入矢量的大小 cin>>n; //定义矢量动态内存 vector<double>scores(n); */ //定义矢量对象 vector<string> names(NUM); vector<int> sexs(NUM); cout<<"Please do exactly as told.you will enter\n"<<NUM<<"Personal name ,Their sex.\n"; int i=0; //输入信息 for(i-0;i<NUM;i++){ cout<<"enter title #"<<i+1<<":"; //获取输入信息 getline(cin,names[i]); cout<<"enter sex(0/1) #"; cin>>sexs[i]; //等待 cin.get(); } cout<<"you enterd the following:\n"<<endl; //输出信息 for(i=0;i<NUM;i++){ cout<<names[i]<<"\t"<<sexs[i]<<endl; } return 0; } #注意:这里总结出STL编程基本思路:定义变量--输入值--读取值
运行结果: