C++数据结构第18课、顺序存储线性表的分析

  • 效率分析
    在这里插入图片描述

  • 问题
    在这里插入图片描述
    分析:不能这样比,要根据 T 来决定

  • 下面的代码正确吗?为什么?
    在这里插入图片描述
    在这里插入图片描述
    这两段代码的问题在于都用两个指针指向了同一片内存空间,在析构的时候会出现意想不到的问题,同一片内存空间不能被析构两次。

  • 分析:
    对于容器类型的类,可以考虑禁用拷贝构造和赋值操作
    在这里插入图片描述

  • 下面的代码正确吗?为什么?
    在这里插入图片描述

分析:顺序存储结构线性表提供了数组操作符的重载,通过重载能够快捷方便的获取目标位置处的数据元素,在具体的使用形式上类似数组,但是由于本质不同,不能代替数组使用。本质是 m_length = 0,在[ ] 操作符函数重载里面属于越界异常。
在这里插入图片描述

  • 小结
    — 顺序存储线性表的插入和删除操作存在重大效率隐患
    — 线性表作为容器类,应该避免拷贝构造和拷贝赋值
    — 顺序存储线性表可能被当成数组误用
    — 工程开发中可以考虑使用数组类代替原生数组

List.h

#ifndef LIST_H
#define LIST_H

#include <Object.h>

namespace DTLib
{

template <typename T>
class List : public Object
{
protected:
    List(const List<T>& e);
    List& operator=(const List<T>& e);
public:
    List(){}

    virtual bool insert(const T& e) = 0;

    virtual bool insert(int i, const T& e) = 0;

    virtual bool remove(int i) = 0;

    virtual bool set(int i, const T& e) = 0;

    virtual bool get(int i, T& e)const = 0;

    virtual int length()const = 0;

    virtual void clear() = 0;
};

}
#endif // LIST_H

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值