注册 登录
编程论坛 数据结构与算法

顺序表的类模板,有两个类型形参,请问有必要吗?

judy0608 发布于 2013-03-08 09:32, 666 次点击
殷人昆《数据结构》,顺序表的类模板,有两个类型形参,请问有必要吗?请高人指点,不胜感激!


template <class T, class E>
class LinearList {
public:
    LinearList(); //构造函数
   ~LinearList(); //析构函数
    virtual int Size() const = 0; //求表最大体积
    virtual int Length() const = 0; //求表长度
    virtual int Search(T x) const = 0;         //搜索
    virtual int Locate(int i) const = 0;        //定位
    virtual E* getData(int i) const = 0;       //取值
    virtual void setData(int i, E x) = 0;       //赋值     
    virtual bool Insert(int i, E x) = 0;                //插入
    virtual bool Remove(int i, E& x) = 0;   //删除
    virtual bool IsEmpty() const = 0;             //判表空
    virtual bool IsFull() const = 0;   //判表满
    virtual void Sort() = 0;   //排序
    virtual void input() = 0;   //输入
    virtual void output() = 0;   //输出
    virtual LinearList<T, E>operator=
    (LinearList<T, E>& L) = 0;   //复制
};
3 回复
#2
yuccn2013-03-08 16:36
看设计吧。作者这样写可能有他的原因,没有看过那书,不明真相。。
#3
judy06082013-03-08 17:52
以下是引用yuccn在2013-3-8 16:36:29的发言:

看设计吧。作者这样写可能有他的原因,没有看过那书,不明真相。。

谢谢!

在其他论坛得到的解答是这样的:
E 相当于 value
T 相当于 key

这段代码它想要实现的是 一个用T作为搜索关键字的E的容器的基类

只不过我们一般不这样设计
1、要搜索的话一般用树,不用线性结构;要用线性结构,就一般不提供搜索,只提供遍历

2、输入输出,这种功能一般不会作为类成员,容器的输入应该就是insert,容器的输出应该就是查找、遍历

3、排序,实际开发当中,我们一般不会花大力气开发一个高效的排序算法,如果一组数据有排序的需求,我们通常更倾向于让这组数据在放入容器的时候就有序,而不是等逻辑需要有序的时候再去排序

举个简单的例子
template< class string, class char >
#4
不玩虚的2013-03-09 23:24
觉得没必要,你用一个试试,应该没问题。
1