2022-1-20 模拟实现vector
2022/1/20 23:13:55
本文主要是介绍2022-1-20 模拟实现vector,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、容器
- 近容器:只能容纳一种固定的数据类型的“器皿”(如string、int arr[10]、char str[10])
- 容器:vector——数组
- 格式:
vector<int> v1; for(int i=1;i<10;i++) { v1.push_back(i); }
- 实现
//Mvector.h #ifndef MVECTOR_H #define MVECTOR_H template<typename T> class Mvector { public: Mvector() { _arr = NULL; _len = 0; _val_len = 0; } Mvector(const Mvector& src) { if (NULL == src._arr) { _arr = src._arr; _len = src._len; _val_len = src._val_len; } else { _len = src._len; _val_len = src._val_len; _arr = new T[_len]; for (int i = 0; i < _val_len; i++) { _arr[i] = src._arr[i]; } } } ~Mvector() { delete[]_arr; } Mvector& operator=(const Mvector& src) { //防止自赋值 if (this == &src) { return *this; } //防止内存泄漏 if (NULL != _arr) { delete[]_arr; } //防止浅拷贝 _len = src._len; _val_len = src._val_len; if (NULL != src._arr) { _arr = new T[_len]; } else { _arr = NULL; } for (int i = 0; i < _val_len; i++) { _arr[i] = src._arr[i]; } return *this; } void push_back(const T& val) { if (full()) { if (_len == 0) { _len = 1; } int len = _len << 1;//两倍扩容 reserve(len); } _arr[_val_len] = val; _val_len++; } void pop_back() { if (empty()) { return; } _val_len--; } T back()const { if (empty()) { return -1; } return _arr[_val_len - 1]; } int size()const { return _val_len; } void resize(int len) { if (len < 0) { len = 0; } if (len == 0) { delete[]_arr; _len = 0; _val_len = 0; return; } T* arr = new T[len](0); for (int i = 0; i < len && i < _val_len; i++) { arr[i] = _arr[i]; } delete[]_arr; _arr = arr; } void reserve(int len) { if (len <= _val_len) { return; } _len = len; T* arr = new T[_len]; for (int i = 0; i < _val_len; i++) { arr[i] = _arr[i]; } delete[]_arr; _arr = arr; } bool empty()const { return _val_len == 0; } T& operator[](int pos) { return _arr[pos]; } T operator[](int pos)const { return _arr[pos]; } private: bool full() { return _val_len == _len; } T* _arr; int _len; int _val_len; }; #endif
这篇关于2022-1-20 模拟实现vector的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-06有没有什么开源的py项目可以对图像进行分类-icode9专业技术文章分享
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享