C++ STL框架

0
6

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 }

<

发布回复

请输入评论!
请输入你的名字