自己实现迷你vector
来源:互联网 发布:vscode sublime 对比 编辑:程序博客网 时间:2024/04/27 23:22
/**//* my implemention of vector */
#include <iostream>
#include <exception>
#include <cassert>
using namespace std;
template <class T>
class MiniVector
...{
public:
MiniVector(int size = 0);
~MiniVector();
MiniVector& operator=(const MiniVector &rv);
MiniVector(const MiniVector &rv);
void PushBack(const T &item);
void PopBack();
T& Front();
T& Back();
int Size() const;
bool IsEmpty() const;
int Capacity() const;
T& operator[](int i);
private:
int size;
int capacity;
T *pAddr;
void Reserve(int capacity, bool copy);
};
template <class T>
void MiniVector<T>::Reserve(int n, bool copy)
...{
T *temp;
if (n < this->capacity)
...{
return;
}
try
...{
temp = new T[n];
}
catch (bad_alloc &e)
...{
cout << e.what();
}
if (copy)
...{
for (int i = 0; i < size; i++)
...{
temp[i] = pAddr[i];
}
}
if (pAddr != NULL)
...{
delete pAddr;
}
capacity = n;
pAddr = temp;
}
template <class T>
MiniVector<T>::MiniVector(int size /**//* = 0 */)
...{
if (0 == size)
...{
this->size = 0;
capacity = 0;
pAddr = NULL;
return;
}
Reserve(size, false);
this->size = size;
for (int i = 0; i < size; i++)
...{
pAddr[i] = T();
}
}
template <class T>
MiniVector<T>::MiniVector(const MiniVector<T> &rv)
...{
this->capacity = 0;
this->size = 0;
this->pAddr =NULL;
Reserve(rv.size, false);
for (int i = 0; i < rv.size; i ++)
...{
pAddr[i] = rv.pAddr[i];
}
this->size = rv.size;
}
template <class T>
MiniVector<T>& MiniVector<T>::operator =(const MiniVector<T> &rv)
...{
if (capacity < rv.size)
...{
Reserve(rv.size, false);
}
for (int i = 0; i < rv.size; i ++)
...{
pAddr[i] = rv.pAddr[i];
}
this->size = rv.size;
return *this;
}
template <class T>
T& MiniVector<T>::operator [](int i)
...{
assert(i > 0 && i < size);
return pAddr[i];
}
template <class T>
void MiniVector<T>::PushBack(const T &item)
...{
if (size == capacity)
...{
if (0 == capacity)
...{
Reserve(1, false);
}
else
Reserve(2 * capacity, true);
}
pAddr[size] = item;
size++;
}
template <class T>
void MiniVector<T>::PopBack()
...{
if (IsEmpty())
...{
cout << "empty vector, popback failed!" << endl;
return;
}
size--;
}
template <class T>
bool MiniVector<T>::IsEmpty() const
...{
return size == 0;
}
template <class T>
int MiniVector<T>::Size() const
...{
return size;
}
template <class T>
int MiniVector<T>::Capacity() const
...{
return capacity;
}
template<class T>
T& MiniVector<T>::Front()
...{
assert(!IsEmpty());
return pAddr[0];
}
template<class T>
T& MiniVector<T>::Back()
...{
assert(!IsEmpty());
return pAddr[size - 1];
}
template <class T>
MiniVector<T>::~MiniVector()
...{
if (pAddr != NULL)
...{
delete[] pAddr;
pAddr = NULL;
}
}
#include <iostream>
#include <exception>
#include <cassert>
using namespace std;
template <class T>
class MiniVector
...{
public:
MiniVector(int size = 0);
~MiniVector();
MiniVector& operator=(const MiniVector &rv);
MiniVector(const MiniVector &rv);
void PushBack(const T &item);
void PopBack();
T& Front();
T& Back();
int Size() const;
bool IsEmpty() const;
int Capacity() const;
T& operator[](int i);
private:
int size;
int capacity;
T *pAddr;
void Reserve(int capacity, bool copy);
};
template <class T>
void MiniVector<T>::Reserve(int n, bool copy)
...{
T *temp;
if (n < this->capacity)
...{
return;
}
try
...{
temp = new T[n];
}
catch (bad_alloc &e)
...{
cout << e.what();
}
if (copy)
...{
for (int i = 0; i < size; i++)
...{
temp[i] = pAddr[i];
}
}
if (pAddr != NULL)
...{
delete pAddr;
}
capacity = n;
pAddr = temp;
}
template <class T>
MiniVector<T>::MiniVector(int size /**//* = 0 */)
...{
if (0 == size)
...{
this->size = 0;
capacity = 0;
pAddr = NULL;
return;
}
Reserve(size, false);
this->size = size;
for (int i = 0; i < size; i++)
...{
pAddr[i] = T();
}
}
template <class T>
MiniVector<T>::MiniVector(const MiniVector<T> &rv)
...{
this->capacity = 0;
this->size = 0;
this->pAddr =NULL;
Reserve(rv.size, false);
for (int i = 0; i < rv.size; i ++)
...{
pAddr[i] = rv.pAddr[i];
}
this->size = rv.size;
}
template <class T>
MiniVector<T>& MiniVector<T>::operator =(const MiniVector<T> &rv)
...{
if (capacity < rv.size)
...{
Reserve(rv.size, false);
}
for (int i = 0; i < rv.size; i ++)
...{
pAddr[i] = rv.pAddr[i];
}
this->size = rv.size;
return *this;
}
template <class T>
T& MiniVector<T>::operator [](int i)
...{
assert(i > 0 && i < size);
return pAddr[i];
}
template <class T>
void MiniVector<T>::PushBack(const T &item)
...{
if (size == capacity)
...{
if (0 == capacity)
...{
Reserve(1, false);
}
else
Reserve(2 * capacity, true);
}
pAddr[size] = item;
size++;
}
template <class T>
void MiniVector<T>::PopBack()
...{
if (IsEmpty())
...{
cout << "empty vector, popback failed!" << endl;
return;
}
size--;
}
template <class T>
bool MiniVector<T>::IsEmpty() const
...{
return size == 0;
}
template <class T>
int MiniVector<T>::Size() const
...{
return size;
}
template <class T>
int MiniVector<T>::Capacity() const
...{
return capacity;
}
template<class T>
T& MiniVector<T>::Front()
...{
assert(!IsEmpty());
return pAddr[0];
}
template<class T>
T& MiniVector<T>::Back()
...{
assert(!IsEmpty());
return pAddr[size - 1];
}
template <class T>
MiniVector<T>::~MiniVector()
...{
if (pAddr != NULL)
...{
delete[] pAddr;
pAddr = NULL;
}
}
- 自己实现迷你vector
- 自己实现 STL vector
- STL vector容器自己实现
- 自己实现的Vector类 这是Vector.h文件
- 自己实现的简单的Vector代码
- 自己实现vector的一些简单功能
- C++自己实现一个简单地Vector
- 实现自己的C++ STL--vector容器
- JS实现迷你日历
- linux ,叫你如何实现脚本自动创建自己专属迷你小linux(一)
- [置顶] 我也来学习nodejs 没有就自己来 色色实现迷你 MVC
- 迷你云搭建自己的云盘
- QT5实现迷你版天气预报
- 自己实现的动态数组(java.util.Vector)
- 动手实现自己的 STL 容器 《1》---- vector
- C++STL之vector,实现属于自己的my_vector
- 【STL源码剖析读书笔记】自己实现vector之MyVector
- 动手实现自己的 STL 容器 《1》---- vector
- stat(const char *, struct stat *)函数的作用
- vs2008与vs2005的冲突
- Hibernate配置文件中映射元素详解
- 如何给基于对话框的应用程序加入一个工具栏?
- 《C语言程序设计教程》课后习题答案
- 自己实现迷你vector
- Hibernate的HQL查询语句对比Sql语句学习
- 金山WPS+Google文件=谷歌金山Office?
- hibernate调用存储(返回记录集)
- my thinking
- 配载信息客户端的搜索策略
- ConditionalOperatpr.java
- mysql sql语句中的特殊字符处理
- 把DataGrid控件定制成漂亮的课程表