STL学习笔记-->初识STL
“这里要用char类型”;
“这里要用int类型”;
“其实实现这个方法只需要把另一个方法的返回值的类型和传入参数的类型改成float类型就实现了”;
“其实这个算法只需要把以前写的那个稍微改动一下就行了”;
………………
学过面向对象语言的都知道GP这个概念,就是泛型程序设计,说的再明白点就是编写不依赖于具体数据类型的程序,C++作为一门面向对象语言,当然也有泛型这个概念,这就不得不提STL(Standard Template Library,标准模板库),是被融入C++标准程序库里面的一个高效的库,对于更深入学习C++了解和学习STL是很必要的!
本人虽然有修C++的课程,但是学的...
接下来的时间我会把我的学习笔记和大家分享,不喜勿喷! (主要是为了加深理解和记忆)
个人觉得先从整体上了解一下是很有必要的:
STL主要包含容器、算法、迭代器三大核心部分:
1. STL容器包含了绝大多数数据结构,如数组、链表、字符串、队列、堆栈、树等;
简单的说就是一种存储有限个某类型数据元素的集合,每种类型都是一个数据结构.
常用的容器和容器适配器对应的头文件
容器类别 | 数据结构(容器类) | 实现头文件 |
序列式容器 | 向量(vector) | <vector> |
双向队列(deque) | <deque> | |
双向链表(list) | <list> | |
关联式容器 | 集合(set)、多重集合(multiset) | <set> |
映射(map)、多重映射(multimap) | <map> | |
容器适配器 | 栈(stack) | <stack> |
队列(queue)、优先级队列(priority_queue) | <queue> |
2.STL算法包含了诸如增、删、改、查、排序等系统(全局)函数模板。这些算法都是泛型算法,同一个算法可以适用于任意类型的容器;
STL中的算法分别被组织在头文件<algorithm>,<numeric>和<functional>中,STL提供了大约70多个已经实现了的算法的函数模板,懂得了后只需要简单的调用算法模板就可以实现某些算法功能.
3.STL 迭代器类似指针一样,通过它的有序移动,把容器中的元素与算法关联起来,它是实现所有STL功能的基础所在。
“容器负责存储数据元素,算法负责加工处理数据元素,那么是谁负责将数据元素从容器里提取出来交给算法去处理呢?又是谁负责将算法处理过的数据元素写入容器呢?这项任务由迭代器负责完成。迭代器将容器与算法耦合起来,通过迭代器可以对容器内任意位置上的元素进行定位和存取(access)。”
三者之间的关系:
容器负责存储数据元素,算法负责处理数据元素。而迭代器则负责从容器中存取一个个数据元素提交给算法去进行处理,或者将算法处理完的数据元素放入容器。因此,迭代器将算法和容器连在一起.
先贴一个简单的程序吧:
#include <iostream> #include <vector> //向量头文件 #include <iterator> //迭代器头文件 #include <algorithm> //算法头文件 #include <functional> //函数对象(仿函数)头文件 using namespace std; //导入命名空间std void main()
{ const int N = 5; vector<int> s(N); //定义一个含有5个int类型数据元素的向量容器对象s vector<int>::iterator pos; //声明一个向量迭代器pos,该向量元素为int型 for (int i = 0; i < N; ++i) cin >> s[i]; //从键盘依次输入整数5、-3、1、0和8 //显然,向量容器可以随机访问 cout<<"从键盘输入的5个整数是:"<<endl; for (pos = s.begin(); pos != s.end(); pos++) cout << *pos <<", "; //通过迭代器pos访问向量容器的元素 cout<<endl; cout<<"输入的5个数的相反数是:"<<endl; transform(s.begin(), s.end(),ostream_iterator<int>(cout, ", "), negate<int>()); cout << endl; }