ITPub博客

首页 > > > 类模板多文件结构,无法解析外部符号

类模板多文件结构,无法解析外部符号

作者:founderwzh 时间:2019-08-19 17:31:37 0 删除 编辑
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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle 包
请登录后发表评论 登录
全部评论

注册时间:2019-07-10

  • 博文量
    159
  • 访问量
    739