问题描述:
在学习C++模板部分的知识,程序里面用last来表示已保存表项的最后位置,且在初始化时令last=-1,表示初始化为一个空表(我的理解是只有一个元素,表中最后位置就是0,所以-1就表示一个空表,应该是这样吧)我的问题是,书中在成员函数定义时并无对last进行新的赋值操作,而程序给我的感觉就是last已经表示此时表项的最后位置了,然而last在初始化明明已经被赋值为-1了,这样成员函数还能实现其功能吗?不知道是我哪里理解错了,麻烦大神指点~!
下面是程序代码:
#include<iostream>
using namespace std;
template<typename T,int size>class seqlist{
Tslist[size]; //存放顺序表的数组,注意是T slist[size],在这里T后有空格就变成了‘1.’,估计是网页bug。。
int Maxsize; //最大可容纳项数
int last; //已存表项的最后位置
public:
seqlist(){last=-1;Maxsize=size;} //构造函数,初始化为空表
//下面都是一些成员函数声明或定义
int Length()const{return last+1;} //计算表长度
int Find(T&x)const; //寻找x在表中的位置(下标)
bool IsIn(T&x); //...
... ...
};
//下面是前面声明的成员函数的定义
template<typename T,int size>int seqlist<T,size>::Find(T & x)const{
int i=0;
while(i<=last && slist[i]!=x)i++; //顺序查找是否有x
if(i>last) return -1; //未找到,返回-1
else return i; //找到,返回位置
}
以这个成员函数的定义为例,last表示的就是表项的最后位置,但程序中并没有对last进行新的赋值操作,如 last=size-1; 这样last还是初始化时的值-1,不是吗?不解,求大神解答~
下面是书中该例全部代码:
注意在
insert()
中,last
是有++
操作的, 所以你在用这个顺序表插入的时候last会自己更新.last = -1只是说明里面没有元素. 这是在构造函数里完成的.
至于你在
find()
里提到的疑惑, 是因为你肯定先要insert()
, 再find()
, 这时last已经不是-1
了, 因为合法的insert()
过了.PS: 不过这本书的码风很糟糕, 窝觉得或许你该找好一点的材料学习(不过讲道理, 数据结构/算法的书基本码风都一塌糊涂...至少国外的书是这样(除了clrs这样用伪码的), 国内不清楚.