看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《steve1012 (steve)》之銘言: : 我想寫一個class : 其中有一個member function 可以創造出一個新的物件 : 比如說我的class 叫作 Integer : 我想寫一個member function 叫做 addInteger : 可以創造出一個新的Integer物件,內容是我所指定的 : 這要怎麼辦到呢? : 要是在member function 中declare的物件不是只能存活到meber function 結束為止? : --------------------------------------------------------------------------- : 想再問一個vector在class中使用的方法 : 我要怎麼讓一個function 回傳vector 呢? : 並且我宣告一個member data 為vector的方式哪裡錯了 : 我爬過文 也用了member initializer 了 : 以下是連結 : http://codepad.org/bHMJOD7J 標頭檔 : http://codepad.org/wGTV9IiI CPP檔 我希望你還可以花點時間回來審視一下自己的原始碼 "假如我呼叫 minsertElement(101) 會發生什麼事?" "會當掉, 因為我的程式只能處理 0~100 的數字" 再看看你的建構子: IntegerSet::IntegerSet() :mInteger(101) { /*...*/ } IntegerSet::IntegerSet(...) :mInteger(101) { /*...*/ } 表示其實用普通的陣列就綽綽有餘了, 為了避免掉一些重複的程式 碼就變成這樣: struct IntegerSet { typedef bool value_type; typedef size_t size_type; static const size_type fixed_size = 101; private: value_type contains[ fixed_size ]; }; 資料成員之所以會叫成 contains 是一種把它當成成員函式的手段 , 像是初始化的程式碼: for( size_type n = 0; n < fixed_size; ++n ) contains[ n ] = false; 做聯集: IntegerSet unions( const IntegerSet & rhs ) { IntegerSet result; for( size_type n = 0; n < fixed_size; ++n ) { result.contains[ n ] = this->contains[ n ] | rhs.contains[ n ]; } return result; } 除了有成員函式可呼叫以外, 回傳值的方法跟 C 語言結構沒什麼 不同, 等到你的程式在執行的時候會依照使用者輸入來決定該儲存 多少數字, 再來考慮用 vector<T>, 否則就像拿武士刀來殺豬一樣 不切實際(而且為了讓它安全執行, 程式碼會比你想得還要複雜) 再來就是這種表格法不適用的情形: 集合元素過少, 這時候就需要 把集合元素真正存起來了, 像是呼叫 minsertElement(9)內部資料 結構就要真的把 9 存起來, 只是如此一來你在做聯集交集時就要 考慮時間複雜度的問題了, 再來提供你幾個關鍵字: std::set<T> std::set_union() std::set_intersection() 其他還有像是 int 的值域問題都是你沒有檢查到的, 例如呼叫 mdeleteElement(-2)程式該怎麼辦? 不做任何事? 還是把參數型態 改成 unsigned int較好? 寫完不會讓你進步, 能發現問題即使 是屍體, 也會強別人很多. -- ★ ★ ███ ███ █▌█ ██◣ ███ ▋▋█ █▂█ █▃█ ███ █▆█ █▄█ ███ █ ◣ █ █ ▋██ █▆◤ ███ ███ Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook φwindyhorse No Eul Oh Seung A Jung Yoon Hye -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (12/29 03:48)
steve1012:卸卸您的指教 12/29 14:00
steve1012:不好意思因為是課本上規定要用vector來寫 12/29 14:01
steve1012:所以才會用vector 不然用陣列我就會寫了 12/29 14:01
steve1012:只能處理0~100也是課本上的規定 12/29 14:01
steve1012:布過還是謝謝大大的提醒 12/29 14:01
steve1012:謝謝你的這篇讓我獲益良多 12/29 14:02
steve1012:其實我還沒寫完code 這幾天完成後會好好研究一下 12/29 14:03