C++ 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 }