【C++/STL】vector的底层刨析和模拟实现
✨ 生于火焰,落俗不可避免,但浪漫至死不渝 🌏
📃个人主页:island1314
🔥个人专栏:C++学习
🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞
目录
vector模拟实现完整代码:
1.vector成员变量
🍵构造函数
📘默认构造
📘拷贝构造
📘迭代器区间初始化
📘n个val构造
📘initializer_list构造
📘赋值运算符重载
2、有关容量和数据个数的函数
3、扩容reserve()
4、operate[]
5、析构函数
6、尾插push_back
7、迭代器
迭代器代码测试:
8、插入insert
9、删除erase
🍋课外知识点:
🍵结语
vector模拟实现完整代码:
#pragma once #include namespace qian { template class vector { public: typedef const T* const_iterator; typedef T* iterator; const_iterator begin() const { return _start; } const_iterator end() const { return _finish; } iterator begin() { return _start; } iterator end() { return _finish; } //类模板的成员函数,迭代器区间初始化 //函数模板 -- 目的支持任意容器迭代器区间初始化 template vector(InputIterator first, InputIterator last) { //reserve(last - first); while (first != last) { push_back(*first); ++first; } } //n个val构造 vector(size_t n, const T& val = T())//缺省值不能给0,因为T可能是string,所以给匿名对象T() { reserve(n); while(n--) { push_back(val); } } //n个val构造,第一个参数为int类型 vector(int n, const T& val = T())//缺省值不能给0,因为T可能是string,所以给匿名对象T() { reserve(n); while(n--) { push_back(val); } } //initializer_list构造 vector(initializer_list il) { reserve(il.size()); for (auto e : il) { push_back(e); } } //默认构造 vector() :_start(nullptr) , _finish(nullptr) , _endOfStorage(nullptr) {} // v2 (v1) vector(const vector& v) { reserve(v.capacity()); for (auto e : v) push_back(e); } void swap(vector& v) { std::swap(_start, v._start); std::swap(_finish, v._finish); std::swap(_end_of_storage, v._end_of_storage); } // v1 = v3 vector& operator = (vector v) { swap(v); return *this; } ~vector() { if (_start) { delete[] _start; _start = _finish = _end_of_storage = nullptr; } } void reserve(size_t n) //开辟空间 { if (n > capacity()) { size_t oldsize = size(); //保存旧空间 T* tmp = new T[n]; if (_start) { for (size_t i = 0; i 0); --_finish;*/ erase(--end()); } iterator insert(iterator pos, const T& x) { assert(pos >= _start); assert(pos = pos) { *(end + 1) = *end; --end; } *pos = x; ++_finish; return pos; } iterator erase(iterator pos) { assert(pos >= _start); assert(pos
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。