自己动手写Vector【Cherno C++教程】


动手写一个Vector

本文是对《最好的C++教程》的动手写数据结构部分的一个整理,主要包含91p动手写Array数组和92p动手写Vector数组的内容。

自己动手来写这些数据结构是学习C++的绝佳方法,并且可以更加深刻的理解标准库中Vector和Array的实现和用法。

https://youtu.be/TzB5ZeKQIHM ,https://youtu.be/ryRf4Jh_YC0

文中代码github链接:https://github.com/zhangyi1357/Little-stuff

目录
  • 动手写一个Vector
  • Array数组
    • Array数组API
    • Array数组实现
      • const成员函数
      • constexpr
  • Vector数组
    • 动态扩容策略
    • 基础版本
      • 基础版本API
      • 基础版本实现
    • move版本
      • move版本API
      • move版本实现
    • EmplaceBack & Placement new
      • 原地构造 API
      • 原地构造实现
      • 关于new和delete的疑问
    • PopBack和析构函数
      • PopBack和析构函数 API
      • PopBack和析构函数实现
    • ::operator new/delete
      • 析构API
      • 正确内存管理实现
    • 总结
  • 参考资料

Array数组

在大多数情况下,当我们需要一个数组时,我们都会优先使用vector,因为vector可以动态扩容,效率也足够高,非常好用。

但是你需要array数组的情况在于很多时候只需要一个静态大小的数组,而这种情况下vector的堆内存分配相较于array数组直接在栈上分配内存的效率就比较低了。

实际上一个Array数组的实现非常简单,如果你对模板比较熟悉的话,基本上就是给一个数组写一个模板然后给用户几个接口。

Cherno C++视频教程91P(Array)bilibili

Cherno C++视频教程92P(Vector) bilibili