欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ STL框架

程序员文章站 2022-03-25 16:57:20
STL(Standard Template Library,标准模板库) STL的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。 STL:六大组件 容器 算法 迭代器 仿函数 适配器 空间配置器 容器:存放数据 算法:操作数据 迭代器:容器和算法的桥梁 ......

stl(standard template library,标准模板库)

stl的三大组件:容器(container)、算法(algorithm)、迭代器(iterator)。

C++ STL框架

 

 

 

stl:六大组件

容器 算法 迭代器 仿函数 适配器 空间配置器
 
容器:存放数据
算法:操作数据
迭代器:容器和算法的桥梁
仿函数:为算法 提供更多的策略
适配器:为算法 提供更多的参数接口
空间配置器:管理容器和算法的空间
 

算法分类:

质变算法:是指运算过程中会更改区间内的元素内容。例如拷贝、替换、删除等等。
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等。
 
迭代器的分类
C++ STL框架

 

 

然后我通过案例来讲解:
C++ 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 }

C++ STL框架