欢迎大家来访二笙的小房子,一同学习分享生活!
写在前面
学习STL,了解STL的历史与发展,深度剖析STL源码,提高自己的编程能力!!!
1.了解STL
1.1 STL概述
- STL诞生:为了建立数据结构和算法的一套标准,并且降低其间的耦合关系以提升各自的独立性、弹性、交互操作性,从而诞生了STL
- STL的价值:
1.STL带给我们一套极具实用价值的零部件,以及一个整合的组织
2.还带给我们一个高层次、以泛型思维为基础的、系统化的、条理分明的软件组件分类学 - STL所实现的,是依据泛型思维架设起来的一个概念结构
1.2 STL的历史
关于STL的历史(一) — 引自Morning主页 | 学步园
1.3 STL六大组件
等具体学到那一部分时再具体说明
1.容器:各种数据结构,如vector、list、deque、set、map
2.算法:各种常用算法,如sort、search
3.迭代器:扮演容器与算法之间的胶合剂,是所谓的泛型指针
4.放函数: 行为类似函数
5.配接器: 一种用来修饰容器或仿函数或迭代器接口的东西
6.配置器: 负责空间配置与管理
1.4 GNU open source
1.GPL详细内容1
2.open source详情内容2
3.不同时期STL的版本3:
-
HP-STL:第一个STL的实现版本
-
P.J.Plauger STL:属于个人作品,由P.J.Plauger本人实现,是HP STL的一个继承版本
-
Rouge Wave STL:由Rouge Wave公司实现,也是HP STL的继承版本,被C++ Builder使用
-
STLport:主要把SGI STL的基本版本移植到VC++和C++ Builder上
-
SGI STL:在GCC采用,在linux上性能出色且开源(在http://www.sgi.com可下载源代码)
-
STL家族图谱如下:
2. 组态设置
2.1 环境组态设置
- ==<stl_config.h>==头文件
- 适配不同编译器下的编译环境
- 如果编译器不提供本STL的一些功能,则定义_STL_NEED_XXX
2.2 部分组态测试
1.组态3: __STL_STATIC_TEMPLATE_MEMBER_BUG
//测试编译器是否支持静态数据成员
//编译器:g++ 4.4.7
//编译环境: Ubuntu 12.04 LTS \n \l
include <iostream>
using namespace std;
template <typename T>
class testClass {
public:
static int _data;
};
template<>
int testClass<int>::_data = 1;
template<>
int testClass<char>::_data = 2;
int main()
{
cout << testClass<int>::_data << endl;
cout << testClass<char>::_data << endl;
testClass<int> obji1, obji2;
testClass<char> objc1,objc2;
cout << obji1._data << endl;
cout << obji2._data << endl;
cout << objc1._data << endl;
cout << objc2._data << endl;
obji1._data = 3;
objc2._data = 4;
cout << obji1._data << endl;
cout << obji2._data << endl;
cout << objc1._data << endl;
cout << objc2._data << endl;
return 0;
}
运行结果:
2.组态5: __STL_CLASS_PARTIAL_SPECIALIZATION
//测试编译器是是否支持局部特殊化的类模板
//编译器:g++ 4.4.7
//编译环境: Ubuntu 12.04 LTS \n \l
#include<iostream>
using namespace std;
template <class I,class O>
struct testClass
{
testClass() {cout<<"I,O"<<endl;}
};
//对类实现偏特化
template <class T>
struct testClass<T*,T*>
{
testClass() {cout<<"T*,T*"<<endl;}
};
//对类实现偏特化
template<class T>
struct testClass<const T*,T*>
{
testClass(){ cout<<"const T*,T*"<<endl;}
};
int main()
{
testClass<int,char> obj1;
testClass<int*,int*> obj2;
testClass<const int*,int*> obj3;
}
运行结果:
3.还有一些其他的组态,大家可以自行测试!
分享生活的每一天!fighting!!!