行业知识
【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
下一篇:服务器关闭重启怎么进桌面?