💞💞 前言
hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹
💥个人主页:大耳朵土土垚的博客
💥 所属专栏:C++入门至进阶
这里将会不定期更新有关C++的内容,希望大家多多点赞关注收藏💖💖
vector模拟实现完整代码
#pragma once #include using namespace std; #include #define _CRT_SECURE_NO_WARNINGS 1 namespace tutu { template class 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) { } //迭代器区间初始化 //函数模板 template vector(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