第十六课、顺序存储结构的抽象实现----------狄泰软件学院

1、课程目标

一、完成顺序存储结构的抽象实现,既然是抽象实现,天然就是抽象类,不能生成对象数组

(1)、抽象类模板,存储空间的位置和大小由子类完成 ide

(2)、这里只实现顺序存储结构的关键操做(增、删、查等)函数

(3)、提供数组操做符,方便快速获取元素(要提供const版本的,方便const对象调用)this

2、具体实现

这里需注意几点spa

(1)、这里将capacity()函数设置为纯虚函数,说明在这里还不须要实现它,将其留到子类中在实现。code

(2)、数组操做符的返回值一个是引用一个是值,是由于const对象不能修改线性表的内容,返回值不能做为左值,而非const对象能够对象

3、完整代码

#ifndef SEQLIST_H #define SEQLIST_H #include "List.h" #include "Exception.h"

using namespace DTLib; namespace DTLib { template <typename T>
class SeqList : public List<T> { private: T* m_array; int m_length; public: bool insert(int i, const T& e) { bool ret = ((0 <= i) && (i <m_length)); ret = ret && ((m_length + 1) <= capacity()); if( ret ) { for(int p=m_length-1; p>=i; p--) { m_array[p+1] = m_array[p]; } m_array[i] = e; m_length++; } return ret; } bool remove(int i) { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { for(int p=i; p<m_length-1; p++) { m_array[p] = m_array[p+1]; } m_length--; } return ret; } bool set(int i, const T& e) { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { m_array[i] = e; } return ret; } bool get(int i, T& e) const { bool ret = ((0 <= i) && (i < m_length)); if( ret ) { e = m_array[i]; } return ret; } int length() const { return m_length; } void clear() { m_length = 0; } T& operator [] (int i) { if((0 <= i) && (i < m_length)) { return m_array[i]; } else { THROW_EXCEPTION(IndexOutOfBoundsException, "parameter i is invalid..."); } } T operator [] (int i) const { return const_cast<SeqList<T>&>(*this)[i];//代码复用
 } virtual int capacity() const = 0; }; } #endif // SEQLIST_H
SeqList.h
相关文章
相关标签/搜索