鍍金池/ 問答/C++/ C++順序表class?

C++順序表class?

問題描述:
在學習C++模板部分的知識,程序里面用last來表示已保存表項的最后位置,且在初始化時令last=-1,表示初始化為一個空表(我的理解是只有一個元素,表中最后位置就是0,所以-1就表示一個空表,應(yīng)該是這樣吧)我的問題是,書中在成員函數(shù)定義時并無對last進行新的賦值操作,而程序給我的感覺就是last已經(jīng)表示此時表項的最后位置了,然而last在初始化明明已經(jīng)被賦值為-1了,這樣成員函數(shù)還能實現(xiàn)其功能嗎?不知道是我哪里理解錯了,麻煩大神指點~!
下面是程序代碼:

#include<iostream>
using namespace std;
template<typename T,int size>class seqlist{
    Tslist[size]; //存放順序表的數(shù)組,注意是T slist[size],在這里T后有空格就變成了‘1.’,估計是網(wǎng)頁bug。。
    int Maxsize; //最大可容納項數(shù)
    int last;  //已存表項的最后位置
public:
    seqlist(){last=-1;Maxsize=size;}  //構(gòu)造函數(shù),初始化為空表
    //下面都是一些成員函數(shù)聲明或定義
    int Length()const{return last+1;} //計算表長度
    int Find(T&x)const; //尋找x在表中的位置(下標)
    bool IsIn(T&x); //...
    ... ...
};
//下面是前面聲明的成員函數(shù)的定義
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;    //找到,返回位置
}  

以這個成員函數(shù)的定義為例,last表示的就是表項的最后位置,但程序中并沒有對last進行新的賦值操作,如 last=size-1; 這樣last還是初始化時的值-1,不是嗎?不解,求大神解答~
下面是書中該例全部代碼:
圖片描述

圖片描述
圖片描述
圖片描述

回答
編輯回答
短嘆

注意在insert()中, last是有++操作的, 所以你在用這個順序表插入的時候last會自己更新.

且在初始化時令last=-1,表示初始化為一個空表(我的理解是只有一個元素,表中最后位置就是0,所以-1就表示一個空表,應(yīng)該是這樣吧)

last = -1只是說明里面沒有元素. 這是在構(gòu)造函數(shù)里完成的.

至于你在find()里提到的疑惑, 是因為你肯定先要insert(), 再find(), 這時last已經(jīng)不是-1了, 因為合法的insert()過了.

PS: 不過這本書的碼風很糟糕, 窩覺得或許你該找好一點的材料學習(不過講道理, 數(shù)據(jù)結(jié)構(gòu)/算法的書基本碼風都一塌糊涂...至少國外的書是這樣(除了clrs這樣用偽碼的), 國內(nèi)不清楚.

2017年6月10日 02:36