• 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 }

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    论有一个服务器后可以干什么
    golang的安装后的文件目录解析
    使用go自带的http包搭建一个的web服务器
    python字符串问题—文件排版
    Python 整数的N进制字符串表示,循环和函数_亲密数,DNA匹配A
    mongodb 基本CRUD
    pip;python包管理工具
    STM32中assert_param的使用
    stm32.cube(一)——系统架构及目录结构
    HTTP、TCP、UDP,Socket,HTTPS
  • 原文地址:https://www.cnblogs.com/loliconinvincible/p/12591995.html
Copyright © 2020-2023  润新知