【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;
}
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
- 【STL C++】简单实现vector
- STL vector的简单实现
- STL之vector简单实现
- STL 简单 vector 的实现
- c++vector简单实现
- c++ stl库 vector简单的实现
- 【STL】Vector类最简单实现
- c++ stl库 vector简单的实现
- STL之:简单的vector实现
- (STL) vector的简单用法和实现
- C模板实现STL容器中的vector
- C++STL库的Vector容器简单实现的源代码参考
- 动态数组对比STL vector及其实现(c/c++)
- C++STL中vector容器类的简单操作
- C++stl vector 用法
- c++STL之vector
- C++STL之vector
- C++STL之vector
- form 表单提交, html中ID, name 的区别
- gradlew: Permission Denied
- Php防跨站分析
- 解决treeview绑定节点多少频繁刷新可以使用有变化时才绑定
- poj1611The Suspects
- 【STL C++】简单实现vector
- 如何获取到Android控件的高度
- iOS 单例模式
- c++函数模板(function template)
- 解决Volley乱码问题
- 利用C的BMP图像的读取、保存及旋转的实现
- private 和final区别 代码实现
- Ubuntu-14.04 脚本双击不执行解决方法
- 移除节点