尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

vector模拟实现与核心机制

vector模拟实现与核心机制
📅 发布时间:2026/6/20 3:56:47
Vector 是 C++ STL 中的动态数组,核心是连续内存存储 + 动态扩容,以下是极简模拟实现,覆盖核心功能:
cpp
 
运行
#include <iostream>
#include <cstring>
using namespace std;template <typename T>
class MyVector {
private:T* _data;       // 存储数据的连续内存指针size_t _size;   // 当前元素个数size_t _capacity; // 已分配内存容量(可容纳的最大元素数)// 扩容核心:重新分配更大内存,拷贝旧数据,释放旧内存void expand() {// 初始容量为0时设为4,否则扩容至2倍size_t newCap = _capacity == 0 ? 4 : _capacity * 2;T* newData = new T[newCap];// 拷贝旧数据(浅拷贝,仅演示核心逻辑)for (size_t i = 0; i < _size; ++i) {newData[i] = _data[i];}delete[] _data; // 释放旧内存_data = newData;_capacity = newCap;}public:// 构造函数:初始化空容器MyVector() : _data(nullptr), _size(0), _capacity(0) {}// 析构函数:释放内存~MyVector() {delete[] _data;}// 尾部添加元素void push_back(const T& val) {// 容量不足时扩容if (_size >= _capacity) {expand();}_data[_size++] = val;}// 删除尾部元素void pop_back() {if (_size > 0) {--_size; // 仅修改size,无需立即释放内存(惰性释放)}}// 获取当前元素个数size_t size() const { return _size; }// 获取当前容量size_t capacity() const { return _capacity; }// 重载[]运算符,支持随机访问T& operator[](size_t idx) {if (idx >= _size) {throw out_of_range("Index out of range");}return _data[idx];}
};// 测试示例
int main() {MyVector<int> vec;vec.push_back(1);vec.push_back(2);vec.push_back(3);cout << "Size: " << vec.size() << ", Cap: " << vec.capacity() << endl; // Size:3, Cap:4vec.push_back(4);vec.push_back(5);cout << "Size: " << vec.size() << ", Cap: " << vec.capacity() << endl; // Size:5, Cap:8cout << vec[2] << endl; // 输出3return 0;
}
 

二、Vector 核心机制(底层原理拆解)

核心机制 原理说明 设计目的
连续内存存储 底层基于数组实现,元素在内存中连续排布,通过指针直接偏移实现随机访问(O (1)) 保证快速访问、遍历效率
容量与大小分离 size 是当前实际元素数,capacity 是已分配内存可容纳的最大元素数 减少频繁内存分配,提升性能
动态扩容 当 size >= capacity 时,分配新内存(通常扩容 2 倍),拷贝旧数据,释放旧内存 实现 “动态” 特性,避免内存浪费
惰性释放 pop_back 仅减少 size,不立即释放内存;clear 仅置 size=0,保留容量 避免频繁释放 / 重新分配内存
随机访问 重载 [] 运算符,通过 _data + idx 直接定位元素(数组偏移原理) 支持快速索引,媲美原生数组

三、关键特性补充

  1. 扩容代价:扩容会触发内存重新分配 + 数据拷贝,是耗时操作(O (n)),因此实际开发中可通过 reserve(n) 提前指定容量,避免频繁扩容;
  2. 内存管理:析构函数必须释放 _data 指向的连续内存,否则会造成内存泄漏;
  3. 浅拷贝问题:上述示例为简化用了浅拷贝,实际工业级实现需重载拷贝构造 / 赋值运算符,实现深拷贝(避免多个对象共享同一块内存);
  4. 迭代器失效:扩容后原迭代器(本质是指针)会指向已释放的旧内存,导致失效,这是 Vector 的核心坑点。

相关新闻

  • Python安装后无法导入模块?Miniconda-Python3.10修复sys.path
  • 免费开源!Stable Diffusion AI 生图天花板,下载安装一款能免费部署的 AI 绘图神器
  • HTML前端展示:将训练结果嵌入网页中的Jupyter输出

最新新闻

  • 2026年淘宝新店流量扶持规则解析与实操指南
  • Python图像色彩分析实战:直方图与色彩云可视化全解析
  • 命令行数据高效粘贴Excel:pandas与printmatrix实战指南
  • 2026茂名漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • Kinetis KL27 ADC与通信接口电气特性深度解析与实战设计
  • 如何3步完成B站视频转文字:免费工具bili2text完全指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号