| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++STL学习笔记(第一篇:stl是什么?为什么要学习stl?迭代器在stl中扮演着什么角色?) -> 正文阅读 |
|
[C++知识库]C++STL学习笔记(第一篇:stl是什么?为什么要学习stl?迭代器在stl中扮演着什么角色?) |
目录 前言大家好呀!我是爱敲代码的小🐟儿。 ? 从今天起,我就要正式开始学习c++的stl库了。学习呢自然不能光看别人写的,自己也要尝试动手写写,于是我打算将我学的知识以笔记的形式记录下来,方便大家共同学习😊 STL是什么?先上个很官方的定义:STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C++ 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。 怎么样,是不是没听懂,其实官方的我也没看太懂😅。咱先看一张图! ?通常认为,STL?是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的,它们各自的含义如表 1 所示。
?对于我们初学者来说,STL的具体结构我们只用了解就行,比较对于我们大多数人来说,我们会用stl便捷的刷题就行,我们其实不太需要搞懂stl背后的复杂原理,嘻嘻🤣😂😍。 不管stl中还是有两个概念需要我们稍微理解一下的——容器和迭代器😅
可能你对这些概念还不是太理解,没关系以后在STL中我们经常会用到它们的,在用的过程中你对这些容器和迭代器慢慢就会有深刻的理解的。 为什么要学习STL?? 在实际的开发过程中,合理组织数据的存取与选择处理数据的算法同等重要,存取数据的方式往往会直接影响到对它们进行增删改查操作的复杂程度和时间消耗。事实上,当程序中存在对时耗要求很高的部分时,数据结构的选择就显得尤为重要,有时甚至直接影响程序执行的成败。
? ? 为了让大家更清楚地了解 STL 是什么,使用 STL 编程有哪些优势,这里举一个使用 STL 的例子。 以 C++ 定义数组的操作为例,在 C++ 中如果定义一个数组,可以采用如下方式: int a[n]; 这种定义数组的方法需要事先确定好数组的长度,即 n 必须为常量,这意味着,如果在实际应用中无法确定数组长度,则一般会将数组长度设为可能的最大值,但这极有可能导致存储空间的浪费😅。 所以除此之外,还可以采用在堆空间中动态申请内存的方法,此时长度可以是变量: int *p = new int[n]; 这种定义方式可根据变量 n 动态申请内存,不会出现存储空间浪费的问题。但是,如果程序执行过程中出现空间不足的情况时,则需要加大存储空间,此时需要进行如下操作: 新申请一个较大的内存空间,即执行?int * temp = new int[m]; 将原内存空间的数据全部复制到新申请的内存空间中,即执行?memecpy(temp, p, sizeof(int)*n); 将原来的堆空间释放,即执行?delete [] p; p = temp; ———————————— 而完成相同的操作,如果采用 STL 标准库,则会简单很多??,因为大多数操作细节将不需要程序员关心😍。下面是使用向量模板类 vector 实现以上功能的示例:
当然了,上述代码中有一些是我们还未介绍的,大家只用大概了解代码功能即可,有关代码中涉及到具体知识,后续的学习笔记会做详细介绍😉。 容器详解我们常见的大多都是序列容器😎 所谓序列容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。
? ? 怎么样,是不是被指向概念整蒙了。没关系,在这里,大家只要对这些概念有个大致印象就行,在接下来的博客中,我会给大家详细的说这些容器的用法的?
?上面所说容器的区别如图所示(●'?'●) 每一个容器都有大量的成员函数,下表只列出了一些最常用的函数?😅
?比如定义一个vector型的容器,就可以这样写😍:
你会写其他容器的定义吗 ?😎 迭代器详解迭代器和?C++?的指针非常类似,它可以是需要的任意类型,通过迭代器可以指向容器中的某个元素,如果需要,还可以对该元素进行读/写操作。 我们常用的迭代器主要有以下几种😂: 1) 前向迭代器(forward iterator)
不同的容器要用到不同的迭代器😊
啊!好多,记不住怎么办,嘻嘻又没说让你现在马上记住,用的多了常用的自然就有印象了 ? 再告诉你个更恐怖的事,它们的定义方法也不太一样😅🐟
注意,以上 4 种定义迭代器的方式,并不是每个容器都适用。有一部分容器同时支持以上 4 种方式,比如 array、deque、vector;而有些容器只支持其中部分的定义方式,例如 forward_list 容器只支持定义正向迭代器,不支持定义反向迭代器。 通过定义以上几种迭代器,就可以读取它指向的元素,
我们那stl中很常用的vector容器来举例吧!
vector容器所对应的是随机访问迭代器。假设p是一个随机访问迭代器,p的定义格式大致是
? ?关于STL呢,咱们今天只是大概讲一下,接下来的博客我会详细的讲解每个容器的用法和注意事项😁 自己最近才开始写博客,内容有很多不足之处,希望大家多多包涵😉 下期预告:为什么说C++array是普通数组的升级版? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:37:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |