STL体系结构基础介绍:
六大部件关系图:
容器,分配器,算法,迭代器,适配器,仿函数。
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
using namespace std;
//返回大于等于40的个数
int main()
{
int ia[6] = {27,210,12,47,109,83};//数组名就是指针常量
vector<int, allocator<int>> vi(ia, ia + 6);//引用ia中的数据
// vector 容器,容器背后有分配器支持分配内存,可以不写(默认值),每次分配的内存是int
cout << count_if ( vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
// 算法count_if,符合条件的元素个数;vi.begin(),vi.end()迭代器;
// less() 仿函数,bind2nd()绑定第二参数,所以not1()中的意思就是,小于40。
// not1() 大于等于40,not1()和bind2nd仿函数适配器
return 0;
}
上述代码用到了六大部件
迭代器:
前闭后开区间
可以取到*(c.begin()),但是*(c.end()),不一定取的到。
遍历容器:
#include<vector> #include<iostream> using namespace std; int main() { vector<int> c; c = { 1,2,3,5,7,8 };//集合体,容器 //vector<int>::iterator ite = c.begin(); auto ite = c.begin(); for (; ite != c.end(); ++ite) { cout << *ite << endl; } return 0; }
使用auto
int main() { vector<int> c; c = { 1,2,3,5,6,7,9,3 }; for (auto elem : c) { cout << elem << endl; } return 0; }
OOP(面向对象编程) vs GP(泛型编程)
OOP:数据和操作放在一起,class中
GP:将数据和操作分离开来,操作就是定义的函数。