文章目录
- STL六大部件
- STL六大部件代码示例
- 时间复杂度
- 前闭后开区间
- auto关键字的用法
STL六大部件
容器
分配器
算法
迭代器
适配器
仿函数
容器要放东西,东西要占用内存,分配器可支持容器解决内存问题。算法处理容器中的数据。迭代器是容器和算法之间的桥梁。迭代器是泛化的指针。仿函数作用就像是一个函数。适配器可以对一些部件进行转换,例如,迭代器适配器,容器适配器,仿函数适配器。
STL六大部件代码示例
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>using namespace std;int main(){
int ia[6]={27,210,12,47,109,83};
//vector 是一个容器,第一个参数是容器中存放的数据类型,第二个参数是一个分配器
//第二个参数可不写,此时会选择默认的分配器
//分配器也是一个模板,需要指定其分配的类型,例如本例中的int
//容器中数据的类型应与分配器中的类型一致
vector<int,allocator<int>>vi(ia,ia+6);//<count_if()是算法
//vi.begin(),vi.end()是迭代器
//not1()是一个仿函数适配器,表示否定,即该count_if函数表示的是容器中大于等于40的个数
//bind2nd()是一个仿函数适配器,绑定第二参数
//less<int>()是仿函数
cout<<count_if(vi.begin(),vi.end(),not1(bind2nd(less<int>(),40)));system("pause");
return 0;
}
输出结果:
4
时间复杂度
- O(1)或O(c):常数时间
- O(n):线性时间
- O(log2nlog_2nlog2n):次线性时间
- O(n2n^2n2):常数时间
- O(n3n^3n3):常数时间
- O(2n2^n2n):常数时间
- O(nlog2nnlog_2nnlog2n):常数时间
前闭后开区间
标准库规定,容器头尾是前闭后开区间,容器不一定是连续空间
下图中对容器进行遍历的程序中,Container替换成任意容器即可,
每一个容器的迭代器都有其自己的类型,其写法如下:
Container<T>::iterator ite = c.begin();
遍历容器的示例一:
for(;ite!=c.end();++ite)...
遍历容器的示例二:
//c是容器
for(auto elem:c)...
//如果我们对容器中的数据进行修改,写法可如下:
for(auto& elem:c)elem*=3;