【C++进阶——STL库】

article/2025/9/30 15:07:56

STL库

介绍

  1. STL是一个具有工业强度的,高效的C++程序库,包含了很多计算机科学领域里所常用的基本数据结构和基本算法;
  2. 六大组件:===容器(Container)、迭代器(Iterator)、算法(Algorithm)、==仿函数、适配器、分配器;

容器

定义

容器时容纳、包含一组元素或元素集合的对象;

序列式容器

  1. 介绍:序列式容器也称顺序容器;是将一组具有相同类型的元素以严格的线性形式组织起来,每个元素都有固定的位置;

向量(verctor)

  1. 功能实现: 本质上是动态数组,随机存取任何元素都能在常数事件完成;在尾端增删元素性能更高;过程:创建空间->填充数据->重建更大的空间->复制原空间数据->删除原空间->添加新数据;(性能最好)
  2. 只能尾插,可以下标访问
  3. 示例:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char *argv[])
{vector<int> vArr;vArr.push_back(10);//尾插vArr.push_back(20);vArr.push_back(30);vArr.push_back(40);vArr.push_back(50);for (int i = 0;i < vArr.size();i++)//元素个数{cout << vArr[i] << " ";}cout << endl;vector<int>::iterator it = vArr.begin();//迭代器,存数组开始地址for (;it != vArr.end();++it)//迭代器,存数组最后一个元素后面的NULL的地址{if(*it == 30){vArr.erase(it);break;}}for (int i = 0;i < vArr.size();i++){cout << vArr[i] << " ";}cout << endl;return 0;
}

列表(list)

  1. 功能实现:本质是双向循环链表,在任何位置增删元素都能在常数事件完成,但随机访问偏慢;
  2. 可头插可尾插,可按条件删除remove_if(),可排序;
  3. 示例:
#include <list>
using namespace std;
int main(int argc, const char *argv[])
{list<int> lArr;lArr.push_back(10);//尾插lArr.push_back(20);lArr.push_back(30);lArr.push_front(40);//头插lArr.push_front(50);lArr.push_front(60);for (list<int>::iterator it = lArr.begin(); it != lArr.end(); it++){cout << *it << " ";}cout << endl;lArr.remove(30);//删除lArr.sort();//排序for (list<int>::iterator it = lArr.begin(); it != lArr.end(); it++){cout << *it << " ";}cout << endl;return 0;
}

双端队列(deque)

  1. 常用方法与list几乎相同但又缺少list的都有方法;比vector多了头插头删的功能却不如vector 性能好;支持下标访问;

关联式容器

  1. 介绍:元素的位置取决于特定的排序准则,和插入顺序无关;查找数据时具有非常好的性能;插入和检索的事件通常以平衡二叉树的方式实现;

集合(set)与多重集合(mulitiset)

  1. 功能实现:通常以红黑树实现;搜索、移除和插入拥有对数的复杂度;set容器内的元素会被自动排序,默认升序;无法使用迭代器去修改set元素,但是可以插入和删除;
  2. 区别:set不允许数据重复,而mulitiset允许数据重复;
  3. 示例:
#include <iostream>
#include <set>using namespace std;int main(int argc, const char *argv[])
{set<int> sArr;sArr.insert(50);sArr.insert(99);sArr.insert(12);sArr.insert(37);sArr.insert(46);sArr.erase(sArr.find(46));//查找元素必须存在for (set<int>::iterator it = sArr.begin(); it != sArr.end(); ++it){cout << *it << " ";}cout << endl;return 0;
}

映射(map)与多重映射(mulitimap)

  1. 特点:map提供的是一种键值对容器,里面的数据都是成对出现的,每一对中的第一个称之为关键字(key)每个关键字只能在map中出现一次;第二个称之为该关键字的对应值;
  2. 区别:mulitimap与map唯一的区别是mulitimap的键值key可以重复,导致map支持[]运算符,而mulitimap不支持;
  3. 用法:
#include <iostream>
#include <map>using namespace std;int main(int argc, const char *argv[])
{map<int,string> mStu;mStu[1] = "张三";mStu[2] = "李四";mStu[3] = "王五";for (map<int,string>::iterator it = mStu.begin(); it != mStu.end(); ++it){cout << it->first << "=>" << it->second << endl;}map<int,string>::iterator it = mStu.find(2);if(it != mStu.end()){cout << it->second << endl;mStu.erase(it);}for (map<int,string>::iterator it = mStu.begin(); it != mStu.end(); ++it){cout << it->first << "=>" << it->second << endl;}return 0;
}

迭代器

  1. 概念:迭代器是一种检查容器内元素并遍历元素的数据类型(本质上通过类实现);C++更趋向于使用迭代器而不是下标操作;标准库为每一种标准容器定义了一种迭代器类型,而极少数容器支持下标操作访问容器元素;
  2. 定义与初始化:每种容器都定义了自己的迭代器类型;每种容器定义了一对名为begin和end的函数用于迭代器返回;
  3. 四种迭代器:正向迭代器(iterator)、常量正向迭代器(const_iterator)、反向迭代器(reversr_iterator)、常量反向迭代器(const_reversr_iterator)。
  4. 迭代器类型:迭代器主要支持两类,随机访问和双向访问。其中vector和deque支持随机访问,list、set、map等支持双向访问。
    1)随机访问:提供了对数组元素进行快速随机访问以及在序列尾部进行快速插入和删除操作;
    2)双向访问:插入和删除所花费的时间是固定的,与位置无关。
  5. 常见运算符操作:
    在这里插入图片描述
  6. 使迭代器失效的操作:
    1)由于一些对容器的操作如删除元素或移动元素会修改容器的内在状态,会使原本指向被移动元素的迭代器失效,也可能使其他迭代器失效(若迭代器指向的元素被删除,迭代器变成野指针,迭代器失效)。
    2)使用无效的迭代器是没有意义的,可能会导致和使用空指针相同的问题,所以使用迭代器时,需要特别留意哪些操作会使迭代器失效,使用无效迭代器会导致严重的运行错误。

算法

  1. 头文件:
    1) 它是由一大堆模板函数组成的,交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
    2) 只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作;
    3) 定义了一些模板类,用以声明函数对象;
  2. 四大类:
    1)非可变序列算法:指不直接修改其所操作的容器内容的算法;
    2)可变序列算法:指可以修改他们所操作的容器内容的算法;
    3)排序算法:对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作;
    4)数值算法:对容器内容进行数值计算。

http://chatgpt.dhexx.cn/article/GMrOV5jn.shtml

相关文章

STL库:map和set

STL库&#xff1a;map和set 文章目录 STL库&#xff1a;map和set1.STL库中set的官方介绍2.set的常用接口3.set的总结4.STL库中multiset的官方介绍5.STL库中map的官方介绍6.map中的键值对pair7.map的常用接口7.1 map的访问操作7.2 map的修改操作7.3 map的查找操作 8.map的总结9.…

STL库(1)

STL库&#xff08;1&#xff09; vectorvector介绍vector使用初始化元素访问内存扩容插入删除 listlist介绍初始化&#xff0c;元素访问插入删除元素 vector和list区别 vector vector介绍 vector是可以改变大小的数组的容器。其内存结构和数组一样&#xff0c;使用连续的存储…

【C++学习五】STL库的应用

文章目录 初识C之 STL标准库1. CSTL的三大核心组件2. 自定义函数与算法对容器实现操作3. 基于自定义函数以及操作模板实现简易数字图像处理3.1 图像灰度变换3.2 图像二值化 4. 初识STL容器之&#xff1a;set集合5.初识STL容器之&#xff1a;map(关联容器)结语 初识C之 STL标准库…

STL库:vector

STL库&#xff1a;vector 文章目录 STL库&#xff1a;vector1.STL库对vector的官方介绍2.vecotr的常用接口2.1 vector的构造函数2.2 vector的迭代器与遍历操作2.3 vector的容量操作2.4 vector的访问操作2.5 vector的修改操作 3.vector迭代器失效问题3.1 insert导致的迭代器失效…

深入理解STL库

关注本人公众号&#xff0c;获取更多学习资料&#xff01; 微信公众号搜索&#xff1a;阿Q正砖 上期说过C这块面试问的东西也蛮多&#xff0c;简历上只要出现C这几个字&#xff0c;那么STL库就是必问。 总不能是面试官问你了解STL库吗&#xff1f;你尴尬的说这块不怎么熟悉。…

C++ STL标准库

STL 组件 STL 是 C 标准程序库的核心。STL 内的所有组件都由模板构成&#xff0c;其元素可以是任意型别。程序员通过选用恰当的群集类别调用其成员函数和算法中的数据即可&#xff0c;但代价是 STL 晦涩难懂。 STL 组件主要包括容器&#xff0c;迭代器、算法和仿函数。 容器…

C++语法篇之STL库

1. STL介绍 STL是Standard Template Library的缩写&#xff0c;即标准模板库。之前在写 Templates 模板的时候&#xff0c;提到过STL对于模板的应用。STL是由多个模板类构成&#xff0c;能够为开发者提供通用的数据结构和算法。 STL主要包含以下内容&#xff1a; 容器 Conta…

【c++ • STL】初步认识什么是 STL 标准库

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;从零开始的 c 之旅&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff0c;不行的…

STL库:list

STL库&#xff1a;list 文章目录 STL库&#xff1a;list1.STL库对list的官方介绍2.list的常用接口2.1 list的构造函数2.2 list的迭代器与遍历操作2.3 list的容量操作2.4 list的访问操作2.5 list的修改操作2.6 list的特别容器操作 3.list的底层源码4.list的模拟实现4.1 list的结…

STL库:string

STL库&#xff1a;string 文章目录 STL库&#xff1a;string1.STL库对于string类的介绍2.string常用接口的掌握2.1 string的构造接口2.2 string的容量操作接口2.3 string的访问操作接口2.4 string的迭代器遍历操作接口2.5 string的修改操作接口2.6 string的非成员函数重载接口2…

C++ 标准模板库STL

目录 前言 一、STL简介 二、STL的组件 三、STL头文件与命名空间 四、STL三大组件之 —— 容器 4.1 容器概述 4.2 序列式容器 4.3 排序式容器 4.4 哈希容器 五、STL三大组件之 —— 迭代器 5.1 迭代器概述 5.2 五种迭代器 5.3 迭代器的定义 5.4 迭…

C++ - STL标准库

1.C STL标准库简介 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西&#xff0c;以及一种得以制造出”可重复运用的东西” 的方法&#xff0c;从函数(functions)&#xff0c;类别(classes),函数库(function libraries),类别库(class libraries)、各种 组件&…

STL库--概述

C标准模板库&#xff08;Standard Template Library,STL&#xff09;是泛型程序设计最成功的实例。STL是一些常用数据结构和算法的模板的集合。 STL六大组件&#xff1a; 容器&#xff08;containers&#xff09;&#xff1a;存放数据 算法&#xff08;algorithms&#xff09;&…

Standard Template Library(STL,标准模板库)

Standard Template Library(STL&#xff0c;标准模板库) STL&#xff08;标准模板库&#xff09;是C标准程序库的核心&#xff0c;它深刻影响了标准程序库的整体结构。 STL是一个泛型(generic)程序库&#xff0c;提供一系列软件方案&#xff0c;利用先进&#xff0c;高效的算…

pyqt学习笔记

pyqt学习笔记 文章目录 pyqt学习笔记前言pyqt主要模块开发环境安装qtpython选择使用anaconda集成版本&#xff1a;anaconda的特点&#xff1a;安装步骤&#xff1a; pycharm导入anaconda:pycharm设置qtdesigner&#xff0c;ui转py工具: 前言 gui学习是一个比较重要的内容&…

[ PyQt入门教程 ] PyQt5开发环境搭建和配置

PyQt5工具可以快速实现简单的界面开发&#xff0c;包括界面设计、布局管理以及业务逻辑实现&#xff08;信号与槽&#xff09;。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。 课程目标 可以动手实现简单的GUI程序。系列文章主要以动手…

PyQt(QtDesigner+Python)编写程序的使用教程(简单版)

有同学问我具体怎么实现QtDesignerPython&#xff0c;简单写一下方便查看 1.安装好后Qtdesinger,打开软件&#xff0c;操作控件设计好想要的界面&#xff1b; 2.将Qtdesinger编写的.ui文件&#xff0c;使用PyUIC&#xff08;需要自己安装配置好&#xff09;软件转到.py文件 …

Python开发:PyQT安装教程

不管开发什么程序&#xff0c;一个友好的用户界面都是至关重要的&#xff0c;然而Python自身并没有集成GUI&#xff0c;但是好在自Python诞生之日起&#xff0c;就有许多优秀的GUI工具集被整合到Python当中&#xff0c;使得Python也可以在图形界面编程领域大展身手。所以从这一…

PyQt5学习教程

介绍 Qt&#xff08;官方发音 [kju:t]&#xff0c;音同 cute&#xff09;是一个跨平台的 C 开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;Command…

PyQt完整入门教程 | 例程附代码

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;cnblogs 作者&#xff1a;lovesoo 1、GUI开发框架简介 pyqt是个好东西&#xff0c;可以做完整的测试方案、脚本、工具进行整合复用等等&#xff0c;本文将以一个实例和大家一起分享。先给自己挖个坑开个头&#xff0…