C++ STL框架
程序员文章站
2022-06-22 09:25:52
STL(Standard Template Library,标准模板库) STL的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。 STL:六大组件 容器 算法 迭代器 仿函数 适配器 空间配置器 容器:存放数据 算法:操作数据 迭代器:容器和算法的桥梁 ......
stl(standard template library,标准模板库)
stl的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。
stl:六大组件
容器 算法 迭代器 仿函数 适配器 空间配置器
容器:存放数据
算法:操作数据
迭代器:容器和算法的桥梁
仿函数:为算法 提供更多的策略
适配器:为算法 提供更多的参数接口
空间配置器:管理容器和算法的空间
算法分类:
质变算法:是指运算过程中会更改区间内的元素内容。例如拷贝、替换、删除等等。
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等。
迭代器的分类
然后我通过案例来讲解:
案例:容器vector
1 #include <iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 void myprintint(int val); 6 void test01() 7 { 8 //单端动态数组vector 类模板 9 vector<int> v;//v就是一个具体的vector容器 10 11 //pash_back 尾部插入 12 v.push_back(100); 13 v.push_back(200); 14 v.push_back(300); 15 v.push_back(400); 16 17 //访问数据 18 //定义一个迭代器存储 v的起始迭代器 19 vector<int>::iterator biginit = v.begin(); 20 //定义一个迭代器存储 v的结束迭代器 21 vector<int>::iterator endit = v.end(); 22 23 //for循环遍历1 24 for(;biginit != endit; biginit++) 25 { 26 //对迭代器取* 代表的是 容器的元素 27 //*biginit 28 cout<<*biginit<<" "; 29 } 30 cout<<endl; 31 32 //for循环遍历2(推荐) 33 for(vector<int>::iterator it=v.begin(); it !=v.end(); it++) 34 { 35 cout<<*it<<" "; 36 } 37 cout<<endl; 38 39 //stl提供的算法来遍历容器(包含算法头文件 algorithm) 40 //for_each 从容器的起始--->结束 逐个元素取出 41 //myprintint 容器数据的打印方式 42 for_each(v.begin(), v.end(), myprintint); 43 cout<<endl; 44 } 45 46 void myprintint(int val) 47 { 48 cout<<val<<" "; 49 } 50 51 int main(int argc, char *argv[]) 52 { 53 test01(); 54 return 0; 55 }
案例3:容器嵌套容器(了解)
1 void test03() 2 { 3 vector<int> v1; 4 vector<int> v2; 5 vector<int> v3; 6 7 v1.push_back(10); 8 v1.push_back(20); 9 v1.push_back(30); 10 v1.push_back(40); 11 12 v2.push_back(100); 13 v2.push_back(200); 14 v2.push_back(300); 15 v2.push_back(400); 16 17 v3.push_back(1000); 18 v3.push_back(2000); 19 v3.push_back(3000); 20 v3.push_back(4000); 21 22 //需求在定义一个vector容器 存放 v1 v2 v3 23 vector<vector<int>> v; 24 v.push_back(v1); 25 v.push_back(v2); 26 v.push_back(v3); 27 28 //for循环遍历 29 for(vector<vector<int>>::iterator it = v.begin(); it!=v.end(); it++) 30 { 31 //*it == vector<int> v1 v2 v3 32 for(vector<int>::iterator mit=(*it).begin(); mit!=(*it).end(); mit++ ) 33 { 34 //*mit ==int 35 cout<<*mit<<" "; 36 } 37 cout<<endl; 38 } 39 }
上一篇: 光影魔术手怎么给图片调节阿宝色调效果?
下一篇: 美图秀秀怎么将图片制作成胶片效果?