首页 > 其他 > 详细

StaticList

时间:2019-12-16 09:01:28      阅读:67      评论:0      收藏:0      [点我收藏+]

到目前为止,我们还无法创建一个顺序存储结构线性表的对象出来,为什么呢?
顺序存储空间究竟是什么,顺序存储空间的大小是多少?

技术分享图片

StaticList设计要点
——类模板
  使用原生数组作为顺序存储空间
  使用模板参数决定数组大小

template <typename T, int N>
class StaticList: public SeqList<T>
{
protected:
    T m_space[N]; //顺序存储空间,N为模板参数
public:
    StaticList(); //指定父类成员的具体值
    int capacity() const; 
};

StaticList.h

#ifndef STATICLIST_H
#define STATICLIST_H

#include "seqlist.h"

namespace DTLib
{
template <typename T, int N>
class StaticList: public SeqList<T>
{
protected:
    T m_space[N]; //顺序存储空间,N为模板参数
public:
    StaticList() //指定父类成员的具体值
    {
        this->m_array = m_space;  //将父类的m_array这个指针指向子类的m_space这个数组
        this->m_length = 0;
    }
    int capacity() const
    {
        return N;
    }
};
}
#endif // STATICLIST_H

测试main.cpp

#include <iostream>
#include "Staticlist.h"

using namespace std;
using namespace DTLib;



int main()
{
    StaticList<int, 5> sl;

    for(int i=0; i<sl.capacity(); i++)
    {
        sl.insert(0,i);  //每次都在线性表的头部进行插入
    }

    for(int i=0; i<sl.length(); i++)
    {
        cout << sl[i] << endl;
    }

    return 0;
}

技术分享图片

 

 实验二:

#include <iostream>
#include "Staticlist.h"

using namespace std;
using namespace DTLib;



int main()
{
    StaticList<int, 5> sl;

    for(int i=0; i<sl.capacity(); i++)
    {
        sl.insert(0,i);  //每次都在线性表的头部进行插入
    }

    for(int i=0; i<sl.length(); i++)
    {
        cout << sl[i] << endl;
    }

    sl[5] = 10;

    return 0;
}

技术分享图片

 

 这个地方抛出了一个异常,因为我们在重载数组操作符时,已经指定了当越界时,就抛出IndexOutOfBoundsException这个类的异常信息。从这个地方,就可以看出抛出异常的好处了,当程序崩溃时,可以让我们快速的定位,如果不在重载数组操作符那个函数中抛出异常,我们将很难定位这种程序崩溃问题。

 

StaticList

原文:https://www.cnblogs.com/-glb/p/12046709.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!