
C++Dynamic_Array(vector)实现
raCopy(ra); cout<<"\n malloSize is "< doubleVector1(&tmpx[1],&tmpx[n]); cout<<"\n numofItems is "< doubleVector2(doubleVector1.begin(),doubleVector1.end(),-3); cout<<"\n numofItems is "<
发布日期:2021-05-08 04:53:58
浏览次数:20
分类:精选文章
本文共 5127 字,大约阅读时间需要 17 分钟。
头文件
#includeusing namespace std;#ifndef Dynamic_Num#define Dynamic_Numtemplate class DynamicVector{ public: template friend ostream &operator<<(ostream &out, const DynamicVector &obj); DynamicVector() : array(NULL), mallocSize(0), numOfItems(0), virtualZero(0) { } DynamicVector(int index) : array(NULL), mallocSize(0), numOfItems(0), virtualZero(index) { } DynamicVector(T * const begin, T * const end,int index=0); DynamicVector(const DynamicVector &obj); DynamicVector operator()(int begin, int end); //~DynamicVector() { if(array&&numOfItems) delete[] array; } void Reset(unsigned int size); void Copy_Basic(const DynamicVector &obj); DynamicVector &operator=(const DynamicVector &obj); unsigned int length() const { return numOfItems; } unsigned int capacity() const { return mallocSize; } int firstIndex() const { return virtualZero; } T *begin() const { return &array[0]; } T *end() const { return &array[numOfItems]; } T &operator[](int index); bool operator==(const DynamicVector &obj) const; void swap(DynamicVector &obj); void insert(int index, const T &obj); inline void push_back(const T &obj); void push_back(const DynamicVector &obj); void remove(); void remove(int index); void remove(int begin, int end); private: T *array = NULL; unsigned int mallocSize = 0, numOfItems = 0; int virtualZero = 0;};template DynamicVector :: DynamicVector(T * const begin, T * const end,int index):numOfItems(end-begin),virtualZero(index){ Reset(end - begin); int i = 0; for (T *ptr = begin; ptr <= end;++ptr){ array[i++] = *ptr; }}template void DynamicVector :: Reset(unsigned int size){ if(numOfItems&&array){ delete[] array; array = NULL; } array = new T[size]; mallocSize = size;}template void DynamicVector :: Copy_Basic(const DynamicVector &obj){ mallocSize = obj.mallocSize; numOfItems = obj.numOfItems; virtualZero = obj.virtualZero; for (int i = 0; i < numOfItems;++i){ array[i] = obj.array[i]; }}template DynamicVector & DynamicVector :: operator=(const DynamicVector &obj){ Reset(obj.mallocSize); Copy_Basic(obj); return *this;}template ostream &operator<<(ostream &out, const DynamicVector &obj){ if(obj.numOfItems){ for (int i = 0; i < obj.numOfItems; ++i){ cout << obj.array[i] << " "; } } else{ cout << "The arrray is empty.\n"; } return out;}template DynamicVector ::DynamicVector(const DynamicVector &obj){ Reset(obj.mallocSize); Copy_Basic(obj);}template T &DynamicVector ::operator[](int index){ int pos = index - virtualZero; if(pos<0||pos>=numOfItems){ cerr << "you have enter a invalid data."; exit(1); } return array[pos];}template bool DynamicVector ::operator==(const DynamicVector &obj) const{ if(numOfItems==obj.numOfItems&&virtualZero==obj.virtualZero){ for (int i = 0; i < numOfItems;++i){ if(array[i]!=obj.array[i]) return false; } } return true;}template DynamicVector DynamicVector ::operator()(int begin, int end){ DynamicVector temp(virtualZero); for (int i = begin-virtualZero; i < end-virtualZero;++i){ temp.push_back(array[i]); } return temp;}template void DynamicVector ::insert(int index, const T &obj){ T *temp = new T[numOfItems]; for (int i = 0; i < numOfItems;++i) temp[i] = array[i]; if (numOfItems + 1 > mallocSize){ Reset(2 * mallocSize); } for (int i = 0; i < index-virtualZero; ++i){ array[i] = temp[i]; } array[index - virtualZero] = obj; for (int i = index - virtualZero,j=i+1; i < numOfItems;++i,++j){ array[j] = temp[i]; } delete[] temp; ++numOfItems;}template inline void DynamicVector ::push_back(const T &obj){ if(numOfItems void DynamicVector ::push_back(const DynamicVector &obj){ if(mallocSize<=numOfItems+obj.numOfItems){ T *temp = new T[mallocSize]; for (int i = 0; i < numOfItems;++i) temp[i] = array[i]; Reset(mallocSize + obj.mallocSize); for (int i = 0; i < numOfItems;++i) array[i] = temp[i]; delete[] temp; temp = NULL; } for (int i = numOfItems; i < numOfItems + obj.numOfItems;++i) array[i] = obj.array[i - numOfItems]; numOfItems += obj.numOfItems;}template void DynamicVector ::swap(DynamicVector &obj){ T *temp= array;array = obj.array;obj.array = temp; unsigned t1 = obj.numOfItems;obj.numOfItems = numOfItems;numOfItems = t1; unsigned t2 = obj.mallocSize;obj.mallocSize = mallocSize;mallocSize = t2; int v = virtualZero;virtualZero = obj.virtualZero;obj.virtualZero = v;}template void DynamicVector ::remove(){ --numOfItems;}template void DynamicVector :: remove(int index){ for (int i = index - virtualZero; i < numOfItems;++i) array[i] = array[i + 1]; --numOfItems;}template void DynamicVector :: remove(int begin, int end){ for (int i = begin-virtualZero; i < numOfItems;++i) array[i] = array[i + end - begin]; numOfItems -= (end - begin);}#endif
main.cpp
int main(){ DynamicVector ra(-2); int i,n; cin>>n; cout<
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月28日 15时56分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell脚本里使用echo输出颜色
2021-05-09
Python2跟Python3的区别
2021-05-09
并发编程——IO模型详解
2021-05-09
Java之封装,继承,多态
2021-05-09
wait()与notify()
2021-05-09
使用js打印时去除页眉页脚
2021-05-09
Spring security OAuth2.0认证授权学习第二天(基础概念-RBAC)
2021-05-09
ORA-00904: "FILED_TYPE": 标识符无效
2021-05-09
数据仓库系列之维度建模
2021-05-09
Scala教程之:函数式的Scala
2021-05-09
java中DelayQueue的使用
2021-05-09
线程stop和Interrupt
2021-05-09
Android中定时执行任务的3种实现方法
2021-05-09
nodejs中npm常用命令
2021-05-09
基于Vue2.0+Vue-router构建一个简单的单页应用
2021-05-09
基于vue2.0实现仿百度前端分页效果(二)
2021-05-09
JS魔法堂:函数重载 之 获取变量的数据类型
2021-05-09
时间序列神器之争:Prophet VS LSTM
2021-05-09
SpringBoot中关于Mybatis使用的三个问题
2021-05-09