線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:681
推到 Plurk!
推到 Facebook!

請問這段程式如何改成remove的演算法?

尚未結案
scott777
一般會員


發表:10
回覆:15
積分:5
註冊:2002-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-09 14:09:53 IP:61.230.xxx.xxx 未訂閱
請問在CSession的DelMember function的程式碼如何改成 用//member.erase(remove(member.begin(),member.end(),UserID),member.end()); 呢? 這樣程式碼就會乾淨多了......    還有就是在AddMember function的程式,Error Checking如何做才會是Safe的呢? 像是try..catch之類的        
//---------------------------------------------------------------------------    #ifndef USessionH
#define USessionH
#include 
using namespace std;
const int MAX_MEMBER_COUNT = 40;
const int MAX_USERNAME_LEN = 65;
const int MAX_NICKNAME_LEN = 25;    #define u_int8_t  unsigned __int8
#define u_int16_t unsigned __int16
#define u_int32_t unsigned __int32    //---------------------------------------------------------------------------
//############################################################################
// 會談成員類別
class _CMember
{
private:
    bool  bHavePic;       // 是否有個人圖片
    char  *Member_PicPath;// 個人圖片存檔路徑
    bool  bHaveSetInfo;   // 是否有設定過資料
    char  vu8UserName[MAX_USERNAME_LEN];   // 成員帳號
    char  vu8NickName[MAX_NICKNAME_LEN];   // 成員暱稱
    unsigned short vu16UserID;     // 成員ID
public:
    void SetMemberPicPath(char *path);
    void SetMemberInfo(unsigned short UserID,char *UserName,char *NickName);        char* getUserName(void){ return vu8UserName;};
    char* getNickName(void){ return vu8NickName;};
    unsigned short getUserID(void){ return vu16UserID;};        // constructer
    _CMember(){
        vu16UserID = 0;
        bHavePic = false;
        bHaveSetInfo = false;
        Member_PicPath = NULL;
    };
    // destructor
    ~_CMember(){
        // 記得將儲存圖片路徑記憶體清除
        if(Member_PicPath) {
            delete Member_PicPath;
            Member_PicPath = NULL;
        }
    };        bool operator==(const unsigned short id)
    {
        return (id == vu16UserID)? true:false;
    }        bool operator!=(const unsigned short id)
    {
        return (id != vu16UserID)? true:false;
    }    };
//############################################################################
// 會談類別
class _CSession
{
private:
    unsigned int mem_count;  // 成員人數
    vector<_CMember*> member; // 會談成員
public:
    bool AddMember(unsigned short UserID,char *UserName,char *NickName);
    bool DelMember(unsigned short UserID);
    void ShowMemInfo();
    // constructer
    _CSession(){
        mem_count = 0;
        member.reserve(20);
    };
    // destructor
    ~_CSession(){
        for(unsigned int i=0;i
#include 
//---------------------------------------------------------------------------
void _CMember::SetMemberInfo(unsigned short UserID,char *UserName,char *NickName)
{
    int len = strlen(UserName);
    len = (len>MAX_USERNAME_LEN-1)?MAX_USERNAME_LEN-1:len;
    strncpy(vu8UserName,UserName,len);
    vu8UserName[len] ='\0';        len = strlen(NickName);
    len = (len>MAX_NICKNAME_LEN-1)?MAX_NICKNAME_LEN-1:len;
    strncpy(vu8NickName,NickName,len);
    vu8NickName[len] ='\0';        vu16UserID = UserID;
    bHaveSetInfo = true;
}
//---------------------------------------------------------------------------
void _CMember::SetMemberPicPath(char *path)
{
    int len = strlen(path);
    len = (len>_MAX_PATH)?_MAX_PATH:len;
    Member_PicPath = new char(len 1);
    strncpy(Member_PicPath,path,len);
    Member_PicPath[len]='\0';
    bHavePic = true;
}
//---------------------------------------------------------------------------
bool _CSession::AddMember(unsigned short UserID,char *UserName,char *NickName)
{
    if(mem_count == MAX_MEMBER_COUNT)
        return false;
    else
    {
      _CMember *mem = new _CMember();
      mem->SetMemberInfo(UserID,UserName,NickName);
      member.push_back(mem);
      mem_count  ;
      return true;
    }
}
//---------------------------------------------------------------------------
bool _CSession::DelMember(unsigned short UserID)
{
    //member.erase(remove(member.begin(),member.end(),UserID),member.end());        unsigned int index;
    vector<_CMember*>::iterator pos;
    pos = member.begin();
    bool flag = false;
    for(index=0;indexgetUserName());
        ShowMessage(member[i]->getNickName());
        ShowMessage(member[i]->getUserID());
    }
}
//---------------------------------------------------------------------------
#pragma package(smart_init)    
發表人 - scott777 於 2004/01/09 17:43:46
happosai
高階會員


發表:93
回覆:228
積分:109
註冊:2002-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-17 23:43:54 IP:218.166.xxx.xxx 未訂閱
Ans1: 既然你在 DelMember() 中有查表動作,為什麼不考慮改用 map or hash_map 讓程式更簡潔、更有效率? 假如你堅持這樣寫,可以考慮使用 STL 的 find 函數簡化程式 Ans2: 請參考 "C 標準程式庫" 一書,裡面有 STL exception 的相關資訊
系統時間:2024-05-18 15:32:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!