STL
可重复运用的东西 从函数 类 函数库 类别库
各种组件 从模块设计到面向对象位的就是复用性的提升。
STL时一个数据结构和算法的标准 减低了他们的耦合性
从而提升可自己的独立性,弹性,交互操作性
STL广义分为 容器 算法 迭代器 (桥梁)
容器和算法之间通过迭代器无缝连接
STL六大组件
容器 算法 迭代器 仿函数 适配器 空间配置器
容器 如:vector list deque set mao 用来存放数据 实现的角度位 class template(类模板)
算法 sort find copy for each
迭代器 容器与算法的胶合剂 类似与指针
仿函数 行为类似函数 仿函数是一种重载了operator()的class或者class template();
适配器 用来修饰容器或者仿函数或迭代器接口的东西(扩展口)
空间配置器 负责空 间的配置和管理 实现了动态分配
容器通过空间配置器存储数据 算法通过迭代器存储容器的内容 仿函数可以协助算法完成不同1的策略变化 适配器可以修饰仿函数
优点
数据与算法分离 内嵌在编译器内
高可重用性(模板) 高性能(map 红黑树) 高移值性
容器
序列式容器 容器中的每个元素都有固定的位置
关联式容器(非线性的数组结构 ) 准确的说是二叉树 各元素之间没有严格的物理顺序关系 关联式容器有一个显著的特点(在值中选择一个值作为关键字key 这个关键字对值起到索引的作用 方便查找)(set/multiset、map/multimap容器)
算法
质变算法是指运算过程中会更改区间元素的内容 如拷贝 替换 删除等
非质变算法 是指运算过程中不会更改区间的元素内容 例如 查找 技术 遍历 寻找极值等等
迭代器
看作一个指针 可以依序询问每个容器所含的各个元素(遍历 )
输入迭代器 | 提供数据的只读访问 | 只读 支持++ ,== ,!= |
---|---|---|
输出迭代器 | 提供数据的只写访问 | 只写 支持++ |
前向迭代器 | 提供读写操作,并能向前推送迭代器 | 读写支持++,==,!= |
双向迭代器 | 提供读写操作 并能先前先后操作 | 读写支持++,– |
随机访问迭代器 | 提供读写操作,并能一跳跃的方式访问容器的任意数据,是功能最强的迭代器 | 读写支持++,–,[n],-n,<.<=,>,>= |
迭代器 遍历功能
普通指针就是一种指针
void test()
{
int arry[5] = {1,2,3,4,5};
int * p = arry;
for(int i =0;i< 5;i++)
{
cout<<*(p++)<<endl;
}
}
容器
void myprintf(int v)
{
cout<<v<<endl;
}
void test()
{
//声明一个容器 里面放int数据对象名称为V 需要包含头文件vector
vector<int>v;
//放入数据
v.push_back(10);
v.push_back(20);
v.push_back(30);
//遍历
//声明迭代器
vector<int>::iterator itbegin = v.begin(); //迭代器指向了容器的开始
vector<int>::iterator itend = v.end(); //迭代器指向了容器的结尾
while(itbegin !=itend )
{
cout<<*itbegin++<<endl;
}
// for(vector<int>::iterator itbegin = v.begin();itbegin !=v.end();itbegin ++)
// {
// cout<<*itbegin<<endl;
// }
//利用算法 需要包含头文件algorithm
for_each(v.begin(),v.end(),myprintf);//需要回调函数
}