c++基础之:可拓展顺序表模版类

/* 
 * File:   main.cpp
 * Author: toozy
 *
 * Created on September 23, 2013, 12:31 AM
 */

#include <cstdlib>
#include <iostream>

using namespace std;


template<class T> 
class ToozyList {
    public:
        ToozyList();
        ToozyList(int aMax,int aPerNumber);
        T* const get(int aIndex) const;
        int insert(int aPosition,T t);
        int del(int aPosition);
        int add(T t);
        int len();
        void expand();
        ~ToozyList();
    protected:
        int _len;
        int _max;
        T *_elements;
        int _perNumber;
        
};

/*
 * 
 */
int main(int argc, char** argv) {
    ToozyList<int>* tList = new ToozyList<int>();
    for (int i = 1; i <= 105; i++) {
        tList->add(i);
    }
    cout<<tList->len()<<endl;
    tList->del(3);
    cout<<tList->len()<<endl;
    for (int i = 1,j = tList->len();i<=j;i++){
        cout<<*tList->get(i)<<endl;
    }
    tList->insert(3,3);
    cout<<tList->len()<<endl;
    for (int i = 1,j = tList->len();i<=j;i++){
        cout<<*tList->get(i)<<endl;
    }
    return 0;
}

template<class T> 
ToozyList<T>::ToozyList(){
    _len = 0;
    _max = 100;
    _perNumber = 100;
    _elements = new T[_max];
};

template<class T> 
ToozyList<T>::ToozyList(int aMax,int aPerNumber):_max(aMax),_perNumber(aPerNumber){
    _len = 0;
    _elements = new T[_max];
};

template<class T> 
ToozyList<T>::~ToozyList(){
    delete [] _elements;
};

template<class T> 
int ToozyList<T>::len(){
    return _len;
};

template<class T> 
T* const ToozyList<T>::get(int aIndex) const{
    if (aIndex>_len || aIndex<1) {
        return 0;
    }
    return &_elements[aIndex];
};

template<class T> 
void ToozyList<T>::expand(){
    T *elements = new T[_len+_perNumber];
    for (int i = 1; i <= _len; ++i) {
        elements[i] = _elements[i];
    }
    delete [] _elements;
    _elements = elements;
};

template<class T> 
int ToozyList<T>::add(T t){
    if (_len == _max) {
        if (_perNumber>0) {
            expand();
        } else {
            return 0;
        }
    }
    _elements[++_len] = t;
    return _len;
};

template<class T> 
int ToozyList<T>::insert(int aPosition,T t){
    if (_len == _max) {
        if (_perNumber > 0) {
            expand();
        } else {
            return 0;
        }
    }
    if (aPosition > _len || aPosition < 1) {
        return 0;
    }
    for (int i = ++_len; i > aPosition;) {
        _elements[i] = _elements[--i];
    }
    _elements[aPosition] = t;
    return aPosition;
};

template<class T> 
int ToozyList<T>::del(int aPosition){
    if (aPosition < 1 || aPosition>_len || _len < 1) {
        return 0;
    }
    for (int i = aPosition;i<_len;) {
        _elements[i] = _elements[++i];
    }
    --_len;
    return 1;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值