C++模板初阶与STL初探


博主名称:deM0one ⭐️C++专栏: C++

文章目录

  • C++模板初阶:内存管理收尾、模板与STL初探
    • 一、C/C++程序内存区域划分
      • [1.1 内存区域总览](#1.1 内存区域总览)
      • [1.2 各区域特点与使用场景](#1.2 各区域特点与使用场景)
    • [二、动态内存管理:malloc/free vs new/delete](#二、动态内存管理:malloc/free vs new/delete)
      • [2.1 共同点](#2.1 共同点)
      • [2.2 六大核心区别](#2.2 六大核心区别)
      • [2.3 operator new 与 operator delete 的底层用法](#2.3 operator new 与 operator delete 的底层用法)
      • [2.4 内存池与池化技术](#2.4 内存池与池化技术)
    • 三、模板初阶:泛型编程的利器
      • [3.1 模板的概念与分类](#3.1 模板的概念与分类)
      • [3.2 函数模板](#3.2 函数模板)
      • [3.3 类模板](#3.3 类模板)
    • 四、STL浅讲
      • [4.1 STL 概述](#4.1 STL 概述)
    • [STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架](#STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架)
      • [4.2 STL 六大组件](#4.2 STL 六大组件)

C++模板初阶:内存管理收尾、模板与STL初探

今日学习:

1.malloc/free与new/delete对比区别

2.模板初阶,函数模板的用法、类模板的定义

3.STL概述,包含的组件

一、C/C++程序内存区域划分

1.1 内存区域总览

1.2 各区域特点与使用场景

  • 栈区:存放一次性数据,向下增长
  • 堆区:动态申请内存,向上增长
  • 数据段(静态区):存放全局数据、静态数据
  • 代码段:存放可执行代码与只读常量
  • 内存映射区:文件映射、动态库、匿名映射
  • 内核空间

二、动态内存管理:malloc/free vs new/delete

2.1 共同点

2.2 六大核心区别

  1. 本质不同:函数 vs 操作符
  2. 初始化:malloc不初始化,new可初始化
  3. 空间计算:malloc手动计算,new自动推导
  4. 返回值:malloc返回void*需强转,new返回对应类型指针
  5. 失败处理:malloc返回NULL,new抛异常
  6. 自定义类型:malloc/free不调用构造/析构,new/delete会调用

2.3 operator new 与 operator delete 的底层用法

operator new底层调用malloc函数申请空间,

2.4 内存池与池化技术

  • 内存池设计思想
  • 定位 new(Placement New)
  • 池化技术扩展:线程池、连接池

tips:内存池实际上就是堆额外划分的一块存放空间资源的池子供给那些需要频繁申请和释放空间的程序使用

三、模板初阶:泛型编程的利器

3.1 模板的概念与分类

  • 函数模板

  • 类模板

3.2 函数模板

  • 函数模板格式与定义
  • 模板实例化机制
    • 隐式实例化(推导实例化)
    • 显式实例化
  • 类型推导规则与隐式类型转换

3.3 类模板

  • 类模板定义与使用

  • 显式实例化示例

  • 手动扩容(异地扩容)实现

  • 类模板支持声明与定义分离

  • 但是不支持声明和定义分离在两个文件

四、STL浅讲

4.1 STL 概述

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架

4.2 STL 六大组件

  • 容器(Containers):string、vector、list、deque、map、set、multimap、multiset、stack、queue
  • 算法(Algorithms):find、swap、reverse、sort、merge
  • 迭代器(Iterators):iterator、const_iterator、reverse_iterator
  • 仿函数(Functors):greater、less
  • 配接器(Adapters)
  • 空间配置器(Allocator)

任何的建议和问题欢迎指出,我们共同进步!

相关推荐
花哥码天下12 小时前
docker流水线
java
十二同学啊13 小时前
Drools规则引擎:让复杂业务规则从代码中解耦
java·后端·开源
是店小二呀13 小时前
鸿蒙PC开源移植:CodeLite原生IDE与Remote Agent适配
android·智能手机·远程桌面
周先生FullStack13 小时前
Mac + 容器本地 MySQL/Redis 环境搭建与网络原理实战
java·spring boot·微服务·容器·架构·个人开发
吠品13 小时前
Nginx负载均衡配置与线上故障排查的一些经验
java·开发语言·数据库
小小龙学IT13 小时前
Qt QPainter 2D 绘图系统深度解析:从画笔到渲染引擎适
c++·qt
边境悍匪13 小时前
蜗牛学苑 Java 智能体学习 Day44|Vue 前端项目搭建 思维导图复盘
java·开发语言·spring boot·学习·阿里云
wabs66613 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
万年咸鱼13 小时前
public class 和 class 的区别详解
java
焦虑的说说13 小时前
redis知识汇总
java·redis