小工具知识网

当前位置: 首页 > 行业知识 > 【C++】Vector的简易模拟与探索

行业知识

【C++】Vector的简易模拟与探索

2026-10-31 07:32:14 来源:互联网转载

前言

hello hello~ ,这里是大耳朵土土垚~ ,欢迎大家点赞关注收藏

个人主页:大耳朵土土垚的博客

所属专栏:C++入门至进阶

这里将会不定期更新有关C++的内容,希望大家多多点赞关注收藏

目录

  • 前言
  • vector模拟实现完整代码
  • 1.vector成员变量
  • 2.尾插push_back()
  • 3.扩容reserve()
  • 4.operate[]
  • 5.析构函数
    • ✨测试代码
    • 6.迭代器
      • const迭代器
      • ✨迭代器测试代码
      • 7.插入insert()
      • 8.删除erase()
        • ✨插入删除测试代码
        • 9.构造函数
          • ✨拷贝构造
          • 拷贝构造测试代码
          • ✨默认构造
          • ✨迭代器区间初始化
          • ✨n个val构造
          • n个val构造测试代码
          • ✨initializer_list构造
          • initializer_list构造测试代码
          • 10.赋值运算符重载
          • 11.reserve()扩容存在的问题
            • ✨测试代码
            • 结语

              vector模拟实现完整代码

              #pragma once#includeusing namespace std;#include#define _CRT_SECURE_NO_WARNINGS 1namespace tutu{templateclass vector{public:typedef T* iterator;typedef const T* const_iterator;//迭代器iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin() const{return _start;}const_iterator end() const{return _finish;}//构造函数//拷贝构造,深拷贝vector(const vector& v){//提前预留空间reserve(v.capacity());for (auto i : v){push_back(i);}}void swap(vector& v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_end_of_storage, v._end_of_storage);}//赋值运算符重载vector& operator=(vector v){swap(v);return *this;}//默认构造vector():_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){}//迭代器区间初始化//函数模板templatevector(InputIterator first, InputIterator last){while (first != last){push_back(*first);++first;}}//n个val构造vector(size_t n, const T& val = T())//缺省值不能给0,因为T可能是string,所以给匿名对象{reserve(n);while (n--){push_back(val);}}//n个val构造重载,第一个参数为int类型vector(int n, const T& val = T())//缺省值不能给0,因为T可能是string,所以给匿名对象{reserve(n);while (n--){push_back(val);}}//initializer_list构造vector(initializer_list il){reserve(il.size());for (auto i : il){push_back(i);}}//析构函数~vector(){if (_start){delete[] _start;_start = _finish = _end_of_storage = nullptr;}}//容量size_t capacity() const{return _end_of_storage - _start;}//数据个数size_t size()const{return _finish - _start;}//扩容void reserve(size_t n){if (n > capacity()){size_t oldsize = _finish - _start;T* tmp = new T[n];//memcpy(tmp, _start, oldsize * sizeof(T));//拷贝数据,浅拷贝对于string类等不适用if (_start)//如果_start为空就不需要拷贝数据{for (size_t i = 0; i = _start);assert(pos 

上一篇:Province发音指南,正确掌握读音的小技巧

下一篇:服务器关闭重启怎么进桌面?