• C++提高篇——STL(上)


    一、什么是STL

    长久以来。软件界一直希望建立一种可冲复利用的东西。C++的面向对象和泛型编程思想,目的就是复用性的提升。大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作,为了建立数据结构和算法的一套标准,诞生了STL。
    STL(Standard Template Library,标准模板库)从广义上分为:容器(container)算法(algorithm)迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数。
    STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。
    1.容器:各种数据结构,如vector、list、 deque、set、map等,用来存放数据;
    2.算法:各种常用的算法,如sort、find, copy、for_each等;
    3.迭代器:扮演了容器与算法之间的胶合剂;
    4.仿函数:行为类似函故,可作为算法的某种策略;
    5.适配器:一种用来修饰容器或者仿函数或迭代器接口的东西;
    6.空间配置器:负责空间的配置与管理。

    二、容器

    STL容器就是将运用最广泛的一些数据结构实现出来
    常用的数据结构:数组,链表,树,栈,队列,集合,映射表等这些容器分为序列式容器关联式容器两种:
    序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置
    关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系

    (一)、vector

    STL中最常用的容器为Vecter,可以理解为数组,具体举例如下:

    void myPrint(int val)
    {
    	cout << val << endl;
    }
    void test01() 
    {
    	//创建vector容器
    	vector<int> v;
    
    	//向容器中插入数据
    	v.push_back(10);
    	v.push_back(20);
    	v.push_back(30); 
    	v.push_back(40);
    
    	//通过迭代器访问容器中的数据
    	vector<int>::iterator Begin = v.begin();  //起始迭代器,指向容器中的第一个元素
    	vector<int>::iterator End = v.end(); //指向容器中的最后一个元素的下一个位置
    
    	//第一种遍历方式,如果起始指针不等于最后一个元素下一个位置的指针,则循环
    	while (Begin != End)
    	{
    		cout << *Begin << endl;
    		//将指针指向下一个位置
    		Begin++;
    	}
    
    	//第二种遍历方式,循环开始指向其实指针,如果起始指针不等于结束指针,则向下移动
    	for (vector<int>::iterator It = v.begin(); It != v.end(); It++)
    	{
    		cout << *It << endl;
    	}
    
    	//第三种遍历方式 利用STL提供的遍历算法
    	for_each (v.begin(), v.end(), myPrint);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    三、算法

    有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法(Algorithms)
    算法分为:质变算法非质变算法
    质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝。替换。删除等等
    非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等

    四、迭代器

    提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。每个容器都有自己专属的迭代器。
    迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针。
    迭代器主要分为如下五种:

    输入迭代器:对数据的只读访问,支持只读,支持++、==、!=
    输出迭代器:对数据的只写访问,支持只写,支持++
    前向迭代器:读写操作,并能向前推进迭代器,支持读写,支持++、== 、! =
    双向迭代器:读写操作,并能向前和向后操作,支持读写,支持++、==、!=
    随机访问迭代器:读写操作,可以以跳跃的方式访问任意数据。功能最强的迭代器,支持读写,支持++、–、[n]、-n、<、<=、>、>=
    目前常用的容器中迭代器种类为双向迭代器,和随机访问迭代器。

  • 相关阅读:
    【机器学习】阿里云天池竞赛——工业蒸汽量预测(6)
    威马汽车欲曲线上市:沈晖已提前持股并任职,销量垫底、员工降薪
    管理多个项目的 Git 配置文件
    R语言ggplot2可视化:gganimate包创建动态柱状图动画(gif)、使用transition_states函数在动画中沿给定维度逐步显示柱状图
    macOS 14 Sonoma 如何删除不需要的 4k 动态壁纸
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    【Git】Git提交代码到远程仓库,删除分支,克隆到本地 等操作指令
    Toronto Research Chemicals BTK甜味剂配方丨D-Abequose
    NTLM与kerberos认证体系详解
    Qt raise()问题
  • 原文地址:https://blog.csdn.net/qq_52302919/article/details/128069137