![]() |
#2
libinden712018-10-31 15:58
|

#pragma once
#include "head.h"
template <typename T>
class Vector
{
public:
Vector();
~Vector();
T & operator[](int nNumber);//重载[]
void AllocatedMemory();//分配内存
bool judgeMemory();//判断内存是否已满
void push_back(T nX);//尾部增加
void pop_back();//尾部弹出
T &at(int pos);//返回pos位置元素的引用
T &front();//返回首元素的引用
T &back();// 返回尾元素的引用
T *begin();
T *end();
T *rbegin();
T *rend();
int size();//返回个数
enum {MEMORY_SIZE_TWO_TIMES};
private:
T *m_nX;
int m_nMemorySzie;
int m_nCount;
};
[code]
#include "Vector.h"
template <typename T>
Vector<T>::Vector()
:m_nX(nullptr), m_nMemorySzie(1024), m_nCount(0)
{
}
template <typename T>
Vector<T>::~Vector()
{
delete m_nX;
}
template <typename T>
void Vector<T>::AllocatedMemory()//分配内存
{
if (m_nX == nullptr)
{
m_nX = new T[sizeof(T)*m_nMemorySzie];//分配内存
}
else if(judgeMemory())
{
T *NewX = new T[sizeof(T)*m_nMemorySzie*MEMORY_SIZE_TWO_TIMES];//再次分配内存
memcpy(NewX, m_nX, m_nMemorySzie);//内存数据拷贝
m_nMemorySzie *= MEMORY_SIZE_TWO_TIMES;//内存大小*2
delete[] m_nX;//删除原有内存
m_nX = NewX;//重新指向新内存
}
}
template<typename T>
bool Vector<T>::judgeMemory()//判断内存是否已满
{
return m_nMemorySzie == m_nCount ? true : false;
}
template<typename T>
void Vector<T>::push_back(T nX)//尾部增加
{
AllocatedMemory();//内存分配
m_nX[m_nCount++] = nX;//尾部添加
}
template<typename T>
void Vector<T>::pop_back()//尾部弹出
{
m_nCount--;//尾部删除
}
template<typename T>
T &Vector<T>::at(int pos)//返回pos位置元素的引用
{
return m_nX[pos];
}
template<typename T>
T &Vector<T>::front()//返回首元素的引用
{
return *m_nX;
}
template<typename T>
T &Vector<T>::back()// 返回尾元素的引用
{
return *(m_nX + m_nCount - true);
}
template<typename T>
T *Vector<T>::begin()//返回向量头指针,指向第一个元素
{
return m_nX;
}
template<typename T>
T *Vector<T>::end()// 返回向量尾指针,指向向量最后一个元素的下一个位置
{
return m_nX + m_nCount;
}
template<typename T>
T *Vector<T>::rbegin()// 反向迭代器,指向最后一个元素
{
return m_nX + m_nCount - true;
}
template<typename T>
T *Vector<T>::rend()// 反向迭代器,指向第一个元素之前的位置
{
return m_nX - true;
}
template<typename T>
int Vector<T>::size()//返回个数
{
return m_nCount;
}
template<typename T>
T &Vector<T>::operator[](int nNumber)
{
return m_nX[nNumber];
}
错误信息:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "public: __thiscall Vector<int>::~Vector<int>(void)" (??1?$Vector@H@@QAE@XZ),该符号在函数 _main 中被引用 vector F:\Code\vector\vector\main.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "public: __thiscall Vector<int>::Vector<int>(void)" (??0?$Vector@H@@QAE@XZ),该符号在函数 _main 中被引用 vector F:\Code\vector\vector\main.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "public: void __thiscall Vector<int>::push_back(int)" (?push_back@?$Vector@H@@QAEXH@Z),该符号在函数 _main 中被引用 vector F:\Code\vector\vector\main.obj 1