首页 > > > 类模板多文件结构,无法解析外部符号
Vector.h:
#include<iostream>
using namespace std;
const int DEFAULT_CAPACITY=20;
template <typename T>
class Vector
{
public:
Vector(int capacity=DEFAULT_CAPACITY,int size=0,T const& e=0);
void insert(int i,T const& e);//固定位置插入数据;
void remove(int i);//删除指定位置数据;
T& operator[](int i);//重载[]运算符;
void append(T const& e);//末尾追加数据;
int size();//获取向量大小;
void print();//输出所有数据;
int search(T data){//搜索指定数据;返回索引;
for(int i=0;i<_size;i++){
if(elem[i]==data){
return i;
}
}
return -1;
}
protected:
void expend();
void shrink();
private:
T *elem;
int capacity;
int _size;
};
Vector.cpp
#include"stdafx.h"
#include"Vector.h"
template <typename T> Vector<T>::Vector(int capacity,int size,const T& e){
this->capacity=capacity;
elem=new T[capacity];
this->_size=size;
for(int i=0;i<_size;i++){
elem[i]=e;
}
}
template<typename T> void Vector<T>::insert(int i,T const& e){
expend();
for(int j=_size;j>i;j--)
elem[j]=elem[j-1];
elem[i]=e;
_size++;
}
template<typename T> void Vector<T>::remove(int rank){
for(int i=rank;i<_size-1;i++){
elem[i]=elem[i+1];
}
_size--;
shrink();
}
template<typename T> T& Vector<T>::operator[](int i){
return elem[i];
}
template<typename T>void Vector<T>::append(T const& e){
expend();
insert(_size,e);
}
template<typename T>int Vector<T>::size(){
return _size;
}
template<typename T>void Vector<T>::print(){
for(int i=0;i<_size;i++){
cout<<"[ "<<i<<" ]"<<ends<<elem[i]<<endl;
}
}
template<typename T>void Vector<T>::expend(){
if(_size<capacity) return;
if(capacity<DEFAULT_CAPACITY) capacity=DEFAULT_CAPACITY;
T*oldElem=elem;
elem=new T[capacity<<=1];
for(int i=0;i<_size;i++){
elem[i]=oldElem[i];
}
delete[]oldElem;
}
template<typename T>void Vector<T>::shrink(){
if(_size*4>capacity)return;
T*oldElem=elem;
elem=new T[capacity>>=1];
for(int i=0;i<_size;i++){
elem[i]=oldElem[i];
}
delete[]oldElem;
}
main.cpp
#include "stdafx.h"
#include"Vector.h"
int main()
{
Vector<int> a;
a.append(1);
a.print();
return 0;
}来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4605/viewspace-3150618/ ,如需转载,请注明出处,否则将追究法律责任。