一、STL标准模板库的组成
STL包括:
容器(containers)、迭代器(iterator)、算法(algorithm)、函数对象、函数适配器
二、容器
1、分类
顺序容器:
1、vector ->向量数组
2、deque-> 队列
3、list 链表
关联容器:
4、map ->二叉树 //4、5键值必须不同
5、set ->集合
6、multiset //6、7允许有多个一样的键值
7、multimap
2、vector容器
优缺点:一个可扩展的数组,随机访问,末尾快。
vector<int>s1,s2;
s1.begin() //容器的第一个元素的位置
s1.end() //容器的最后一个元素后面的位置
S1.Clear() //清空容器
S1.empty() //检查容器是否为空
S1.Size() //获得容器的大小
S1.swap(s2) //交换s1和s2容器中的内容
3、deque容器
优缺点:可两端插入元素,两端快,中间墁。
4、list容器
优缺点:在任意位置插入和删除都很快,不支持随机访问
三、迭代器
1、指针是迭代器中的一种。迭代器是泛化的指针。
2、迭代器分为输入迭代器(只读、istream_iterator)、输出迭代器(只写、ostream_iterator)、前向迭代器(输入+输出、线性、单向遍历)、双向迭代器、随机访问迭代器(deque、vector)
两个迭代器表示一个区间:[p1,p2)
输入迭代器:
输出迭代器:
ostream_iterator<int>(cout, " 分隔符")
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
double square(double x)
{
return x*x;
}
int main()
{
transform(istream_iterator<double>(cin), istream_iterator<double>(), ostream_iterator<double>(cout, " "), square);
cout << endl;
system("pause");
return 0;
}
一个简单的代码:
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
using namespace std;
template<class T>
class square
{
public:
T operator()(T &t) //重载()实现特殊作用
{
return t*t;
}
};
int main()
{
const int N = 5;
vector<int> s(N);
for (int i = 0; i < N; i++)
{
cin >> s[i];
}
transform(s.begin(), s.end(), ostream_iterator<int>(cout, " "), negate<int>()); //negate 属于算法取反
cout << endl;
system("pause");
return 0;
}