【STL C++】简单实现vector

来源:互联网 发布:迅雷 mac safari提示 编辑:程序博客网 时间:2024/05/01 20:17
/*

    fileName:       向量Vector的实现
date:           2015.9.14
finalDate:      2015.9.19
author:         Walter Zhao

*/


#include <iostream>
#include <ostream>


using namespace std;

template<typename Object>
class Vector
{
public:
explicit Vector(int size = 0) :m_size(size)//单个参数的构造函数前面最好使用explicit来限定,防止隐式的类型转换
{
m_capacity = size + SPACE_CAPACITY;
m_object = new Object[m_capacity];
}


Vector(Object *array1, Object *array2)
{
//注意开辟空间
int size = array2 - array1;//计算数元素个数
m_capacity = size + SPACE_CAPACITY;
m_size = size;
m_object = new Object[m_capacity];


for (int i = 0; i < size;i++)
{
this->m_object[i] = array1[i];
}
}

Vector(const Vector &rhs):m_object(NULL) //copy constructor
{
if (this != &rhs)
{
this->m_capacity = rhs.m_capacity;
this->m_size = rhs.m_size;
m_object = new Object[m_capacity];


for (int i = 0; i < m_size;i++)
{
this->m_object[i] = rhs.m_object[i];
}
}

}


~Vector()//destructor
{
if (NULL != m_object)
{
delete []m_object;
m_object = NULL;//防止野指针
}
}


const Vector& operator=(const Vector& rhs)
{
if (this != &rhs)
{
Vector temp(rhs);


Object *pTemp = temp.m_object;
temp.m_object = m_object;
m_object = pTemp;
}

return *this;//返回引用类型
}


friend ostream& operator<<(ostream& out, const Vector<Object> &rhs)
{
out << m_object << endl;
}


void Resize(int newSize)//改变大小
{
if (newSize<m_size)
{
return;//如果新输入的大小小于原有大小怎不进行任何操作
}


Object *old = m_object;
m_size = newSize;
m_capacity = SPACE_CAPACITY + newSize;
m_object = new Object[m_capacity];


for (int i = 0; i < m_capacity;i++)
{
m_object[i] = old[i];
}


delete old;
old = NULL;
}


Object& operator[](int index)//取特定的元素
{
return m_object[index];
}


bool IsEmpty()const//判空
{
return 0 == m_size;
}


int GetSzie()const//取大小
{
return m_size;
}


int GetCapacity()const//取容量
{
return m_capacity;
}


void Push_back(Vector& rhs)//后插入一个元素
{
if (m_size == m_capacity)
{
Resize(2 * m_capacity + 1);
}
m_object[m_size++] = rhs;
}


void Pop_back()//后删除一个元素
{
m_size--;
}




Object& Back()const //返回最后一个元素
{
return m_object[m_size - 1];
}


//更改名字
typedef Object* iterator;
typedef const Object* const_iterator;


//重载两种形式的迭代器
iterator Begin()
{
return &m_object[0];
}


const_iterator Begin()const
{
return &m_object[0];
}


iterator End()
{
return &m_object[m_size];
}


const_iterator End()const
{
return &mm_object[m_size];
}


enum{SPACE_CAPACITY = 16};//这顶一些容量


private:
int m_size;//大小
int m_capacity;//容量
Object *m_object;//指针
};




int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7 };
int len = sizeof(a) / sizeof(a[0]);
Vector<int > v1(a,a+len);
Vector<int > v2(v1)
Vector<int >v3;
v3 = v1;


return 0;
}
0 0
原创粉丝点击