理解向量vector的一些实现细节
来源:互联网 发布:suse 11 安装yum 编辑:程序博客网 时间:2024/05/16 12:18
#include <iostream>using namespace std;enum ErrorType{invalidArraySize, memoryAllocFail, indexOutOfRange};const char*ErrorList[]={"invalidArraySize","memoryAllocFail","indexOutOfRange"};template <class T>class MyVector{public:MyVector(int sz=50);MyVector(const MyVector<T>& V);~MyVector();MyVector& operator=(const MyVector& V);T& operator[](int i);operator T*(); // 实现强制类型转换 MyVector---> T*;int Size();void resize(int sz);void Error(ErrorType err);private:T *Array;int size;};template<class T>void MyVector<T>::Error(ErrorType err){cout << ErrorList[err] << endl;exit(1);}template<class T>MyVector<T>::MyVector<T>(int sz){if(sz<=0){Error(invalidArraySize);}else{size = sz;Array = new T[size];if(Array==NULL)Error(memoryAllocFail);}}template<class T>MyVector<T>::MyVector(const MyVector<T>& V){int n = V.size;size = n;Array = new T[n];if(Array==NULL)Error(memoryAllocFail);T*org_array = Array;T*new_array = V.Array;while(n--)*org_array++ = *new_array++;}template<class T>MyVector<T>::~MyVector(){delete [] Array;}template<class T>MyVector<T>& MyVector<T>::operator=(const MyVector<T>& V){int n = V.size;if(size!=n){delete[] Array;size = n;Array = new T[size];if(Array==NULL)Error(memoryAllocFail);}T* org_Array = Array;T* new_Array = V.Array;while(n--)*org_Array++ = *new_Array++;return *this;}template<class T>T& MyVector<T>::operator[](int i){if(i<0 || i>=size)Error(indexOutOfRange);return Array[i];}template<class T>MyVector<T>::operator T*(){return Array;}template<class T>void MyVector<T>::resize(int sz){if(sz<=0)Error(invalidArraySize);if(size == sz) return;int n=(sz<size)?sz:size;T* org_Array = Array;T* new_Array = new T[sz]();if(new_Array==NULL)Error(memoryAllocFail);T* tmp = new_Array;while(n--)*tmp++ =*org_Array++;//*new_Array++ = *org_Array++; // 这句话无法赋值???原因是啥?delete[] Array;Array = new_Array;size = sz;}template<class T>int MyVector<T>::Size(){return size;}int main(){MyVector<int> V1(5);for(int i=0; i<V1.Size(); i++)cin>>V1[i];MyVector<int> V2 = V1; // 拷贝构造函数,相当于V2(V1);MyVector<int> V3; // 默认构造函数V3 = V2; // 复制运算 operator=MyVector<int> V4(V3); // 拷贝构造函数;cout << "V2======\n";for(int i=0; i<V2.Size(); i++)cout << V2[i] << " ";cout << endl;cout << "V3======\n";for(int i=0; i<V3.Size(); i++)cout << V3[i] << " ";cout << endl;cout << "V4======\n";for(int i=0; i<V4.Size(); i++)cout << V4[i] << " ";cout << endl;V1.resize(10);cout << "================\n";for(int *p=V1; p<V1+10; p++)cout << *p << endl;return 0;}
阅读全文
0 0
- 理解向量vector的一些实现细节
- 向量vector的实现
- 向量Vector的实现
- 向量vector的实现
- vector向量容器的一些基本操作
- 向量vector理解
- 向量vector的实现(初学着)
- C++向量Vector模板的实现
- c++中vector向量的一些主要问题
- OkHttp的一些实现细节
- SIFT 的一些细节的理解
- lua中一些细节的理解
- vector的一些案例,帮助理解vector用法
- 用vector实现二维向量
- 实现STL中的向量 vector
- 用vector实现二维向量
- 用vector实现二维向量
- 用vector实现二维向量
- 【网络编程】(二)同步和异步,阻塞和非阻塞,多路复用技术
- leetcode.array--73. Set Matrix Zeroes
- Window下让JAR在后台运行的方法
- 微信网页授权
- droidcon 北京2017安卓技术大会学生票
- 理解向量vector的一些实现细节
- CCF 201709-4 通信网络
- python3 pygame学习(1):display的使用
- P1282 多米诺骨牌
- Idea maven项目不能新建package和class的解决
- MOS管原理用法
- 从oracle官网下载JavaMail所需jar的操作流程
- 第九周项目1—二叉树算法库
- 数据库缓存