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)

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

相关推荐
淡海水1 小时前
15-02-YooAsset面试篇-Unity架构设计与源码
java·unity·面试·c#·游戏引擎·yooasset
萧瑟其中~1 小时前
多线程锁详解:互斥锁·自旋锁·读写锁(CAS + futex 原理)
开发语言·c++
weixin_BYSJ19871 小时前
springboot酒店管理系统--附源码27436
java·spring boot·python·随机森林·贪心算法·eclipse·django
2401_894915531 小时前
GEO 源码部署如何实现精准地域分发?核心配置参数深度讲解
java·运维·服务器·后端·开源
evans在进步3 小时前
LeetCode 2 两数相加:链表模拟加法,Java 图解进位过程
java·leetcode·链表
yyy(十一月限定版)3 小时前
016【入门】双端队列
数据结构·c++
知行合一。。。4 小时前
DeepAgents--01--Agent和OpenClaw的相关概念
android·数据库
2401_858286114 小时前
OS82.【Linux】设计线程池
java·linux·运维·服务器·开发语言·算法·线程池
数据知道4 小时前
IDOR 不安全的直接对象引用:API 越权实战检测
java·开发语言·网络·安全·网络安全