STL第一讲

一、认识headers、版本、重要资源

1. C++ Standard Library和Standard Template Library

前者:c++标准库;后者直译为“标准模板库”

区别:

  • C++标准库:是c++编译器提供的自带的头文件(不带.h后缀)
  • 新版兼容C的头文件的形式cxxxx;旧版的xxxx.h也可用但不建议
  • 新版c++标准库的头文件都存在于命名空间std
  • STL:《源码剖析》所说的六大部件

查看自己的g++编译器:

wkm@ai303-virtual-machine:~/code/shell$ gcc -v -x c++ -E -
....
#include "..." search starts here:
#include <...> search starts here:/usr/include/c++/9/usr/include/x86_64-linux-gnu/c++/9/usr/include/c++/9/backward/usr/lib/gcc/x86_64-linux-gnu/9/include/usr/local/include/usr/include/x86_64-linux-gnu/usr/include
End of search list.
....

2. 一些重要网站

  1. cplusplus
  2. cppreference
  3. gcc.gnu.org

二、STL介绍

六大部件:
stl六大部件
前闭后开区间:
每个容器表示范围的成员:

  • begin:指向首元素
  • end:指向末尾元素的下一位

三、容器

容器分类与各种测试(一)

图解:

  1. 无须容器属于关联容器,所以推荐将container依然分为两大类:顺序容器、关联容器
  2. 顺序容器中的箭头:表示可扩充的地方;如vector只能在尾部扩充;
  3. 关联容器底层实现:红黑树;无序容器:hashtable
  4. 原图中的红标是c++11标准引入的

容器分类与各种测试(二)

测试代码风格:namespace、变量定义定格
在数据量很大的时候,先sort后查找,sort步骤就很耗时。

容器分类与各种测试(三)

stl全局有sort(用法是::sort,即添加作用域运算符),容器也可能有自己的sort。建议使用某种容器时,调用自身的sort。

gnu中有非c++标准库的容器:slist,头文件:ext\slist,其他的成员使用方法与forward_list相同

  • deque:
    • “分段连续”,由一段段的buffer组成,每个buffer能存储若干个元素;
    • push_front和push_back用完一个buffer后,会再向前/后扩充一个buffer(一个buffer具体大小取决于stl具体实现)
    • deque没有自己的sort;

stack和queue是容器适配器;不提供iterator,否则会破坏其“先进后出”/“先进先出”的基本原则。

容器分类与各种测试(四)

对于无序容器:当元素个数大于bucket_count(),会扩充bucket;

旧代码中关于hash_set/hash_map/hash_multiset/hash_multimap,需要找到对应的头文件位置

分配器

每个容器的都有默认分配器:std::allocator

建议:尽量使用容器,因为自己直接使用分配器,手动分配和释放内存会加大工作量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427204.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis----缓存

MyBatis是一个流行的Java持久化框架&#xff0c;它提供了一个灵活的缓存机制来提高查询性能。 MyBatis的缓存机制主要分为一级缓存和二级缓存。 一级缓存是指在同一个SqlSession中&#xff0c;查询结果会被缓存起来&#xff0c;当再次执行同样的查询时&#xff0c;直接从缓存中…

大数据学习之Flink算子、了解DataStream API(基础篇一)

DataStream API &#xff08;基础篇&#xff09; 注&#xff1a; 本文只涉及DataStream 原因&#xff1a;随着大数据和流式计算需求的增长&#xff0c;处理实时数据流变得越来越重要。因此&#xff0c;DataStream由于其处理实时数据流的特性和能力&#xff0c;逐渐替代了DataSe…

Termux: 超28k stars,Android终端下的强大Linux环境

Termux: 超28k stars&#xff0c;Android终端下的强大Linux环境 随着移动技术的快速发展&#xff0c;我们的手机已经不仅仅是通信工具&#xff0c;而是成为了我们生活的延伸。我们使用手机进行社交媒体、游戏、照相等各种各样的活动。然而&#xff0c;你有没有想过&#xff0c…

RabbitMQ系列之入门级

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《RabbitMQ系列之入门级》。&#x1f3af;&#x…

书生·浦语大模型实战营-学习笔记5

LMDeploy 大模型量化部署实践 大模型部署背景 LMDeploy简介 轻量化、推理引擎、服务 核心功能-量化 显存消耗变少了 大语言模型是典型的访存密集型任务&#xff0c;因为它是decoder-by-decoder 先把数据量化为INT4存起来&#xff0c;算的时候会反量化为FP16 AWQ算法&a…

python_ACM模式《剑指offer刷题》链表1

题目&#xff1a; 面试tips&#xff1a; 询问面试官是否可以改变链表结构 思路&#xff1a; 1. 翻转链表&#xff0c;再遍历链表打印。 2. 想要实现先遍历后输出&#xff0c;即先进后出&#xff0c;因此可借助栈结构。 3. 可用隐式的栈结构&#xff0c;递归来实现。 代码…

基于蛙跳优化的神经网络数据预测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过蛙跳优化算法&#xff0c;优化神经网络的权值参数&#xff0c;然后使用优化后的神经网络模型对数据进行预测&#xff0c;输出预测曲线。 2.测试软件版本以及…

【C工具】【串口助手】C语言操作虚拟串口和物理串口

虚拟串口基础读写例子&#xff0c;记录备忘 环境&#xff1a;win10 mingw64 操作虚拟串口和物理串口的区别只是串口名称不同&#xff0c;需要用个奇怪的写法&#xff0c;比如虚拟串口号为21&#xff1a; char portName[] "\\\\.\\COM21"物理串口就可以直接写串口号…

全桥RLC模态图具体分析

T0时刻&#xff0c;Q6,Q7,Q1.Q4开通&#xff0c;驱动为高电平&#xff0c;励磁电流线性上升,但是lm电流在to是为负电流&#xff0c;这时刻有给副边提供能量&#xff0c;Ip电流开始上升&#xff0c;这个时候给副边的电流也是从0开始上升,这个能量由励磁电感提供&#xff0c;Co给…

【C++】初步认识基于C的优化

C祖师爷在使用C语言时感觉到了不方便的一些点&#xff0c;于是一步一步改进优化&#xff0c;最后形成了C 本文将盘点一下基于C的语法优化 目录 命名空间&#xff1a;命名空间定义&#xff1a;命名空间使用&#xff1a; C输入&输出&#xff1a;cout&#xff1a;endl&#…

Go实现LRU算法

LRU是什么&#xff1f; LRU是内存淘汰策略&#xff0c;LRU &#xff08;Least recently used&#xff1a;最近最少使用&#xff09;算法在缓存写满的时候&#xff0c;会根据所有数据的访问记录&#xff0c;淘汰掉未来被访问几率最低的数据。也就是说该算法认为&#xff0c;最近…