Hackpads are smart collaborative documents. .

戴均民

1445 days ago
Unfiled. Edited by 戴均民 1445 days ago
戴均民 12月10日
 
  • CPE 報名
  • 考試日期:12/17 下禮拜二晚上 17:30
  • 由於即將要考試,所以這禮拜改上 STL
 
  • 系上辦的寒假程式訓練(推薦)
本系寒假特邀請上海復旦大學吳永輝老師對參與程式設計競賽有興趣學生進行培訓,時間:2014年1月17日至1月29日,地點:821電腦教室,名額50位(大一至大三優先)。
 
授課老師簡介:吳永輝博士是ACM-ICPC中國賽區指導委員會成員,復旦大學ACM程式設計競賽隊教練。自2001年起連續帶隊進入 ACM-ICPC世界總決賽,並取得過世界第六名的佳績。
 
課程內容與規劃 : http://goo.gl/uAm1Uk
 
報名表填寫成功,才算完成報名,謝謝。
 
  • 考試專用快速 I/O 轉向(須背,必考)
  • int main()
  • {
  •     freopen("pa.in","r",stdin);   // pa.in 是檔名
  •     freopen("pa.out","w",stdout); // pa.out 是檔名
  • }
 
  • C++ STL 簡介
 
被譽為STL之父的 Alexander Stepanov,出生於蘇聯莫斯科,早在 20 世紀 70 年代後半期,他便已經開始考慮,在保證效率的前提下,將演算法從諸多具體應用之中抽象出來的可能性,這便是後來泛型化思想的雛形。為了驗證自己的思想,他和紐約州立大學教授 Deepak Kapur、倫塞里爾技術學院教授 David Musser 共同開發了一種叫做 Tecton 的語言。儘管這次嘗試最終沒有取得實用性的成果,但卻給了 Stepanov 很大的啟示。
 
戴均民
  • STL 的本質的思想是將算法和數據結構之間獨立!
 
在隨後的幾年中,他又和 David Musser 等人先後用 Schema 語言(一種 Lisp 語言的變種)和 Ada 語言建立了一些大型程序庫。這其間,Alexander Stepanov 開始意識到,在當時的物件導向程序設計思想中所存在的一些問題,比如抽象數據類型概念所存在的缺陷。Stepanov 希望通過對軟件領域中各組成部分的分類,逐漸形成一種軟件設計的概念性框架。
 
1987 年左右,在貝爾實驗室工作的 Alexander Stepanov 開始首次採用 C++ 語言進行泛型軟件庫的研究。但遺憾的是,當時的 C++ 語言還沒有引入模板(template)的語法,現在我們可以清楚的看到,模板概念之於 STL 實現,是何等重要。是時使然,採用繼承機制是別無選擇的。儘管如此,Stepanov 還是開發出了一個龐大的算法庫。與此同時,在與 Andrew Koenig(前ISO C++標準化委員會主席)和 Bjarne Stroustrup(C++語言的創始人)等頂級大師們的共事過程中,Stepanov 開始注意到 C/C++ 語言在實現其泛型思想方面所具有的潛在優勢。就拿 C/C++ 中的指針而言,它的靈活與高效運用,使後來的 STL 在實現泛型化的同時更是保持了高效率。另外,在 STL 中佔據極其重要地位的 iterator 子概念便是源自於 C/C++ 中原生指針(native pointer)的抽象。
 
1988 年,Alexander Stepanov 開始進入惠普的 Palo Alto 實驗室工作,在隨後的 4 年中,他從事的是有關磁盤驅動器方面的工作。直到 1992  年,由於參加並主持了實驗室主任  Bill Worley  所建立的一個有關算法的研究項目,才使他重新回到了泛型化算法的研究工作上來。項目自建立之後,參與者從最初的  8  人逐漸減少,最後只剩下兩個人:Stepanove 本人和 Meng Lee。經過長時間的努力,最終,信念與汗水所換來的是一個包含有大量數據結構和算法部件的龐大運行庫。這便是現在的 STL 的雛形(同時也是 STL 的一個實現版本:HP STL)。
 
1993 年,當時在貝爾實驗室的 Andrew Koenig 看到了 Stepanove 的研究成果,很是興奮。在他的鼓勵與幫助下,Stepanove 於是年9月的聖何塞為 ANSI/ISO C++ 標準委員會做了一個相關演講(題為"The Science of C++ Programming"),向委員們講述了其觀念。然後又於次年 3 月,在聖迭戈會議上,向委員會提交了一份建議書,以期使 STL 成為 C++ 標準庫的一部分。儘管這一建議十分龐大,以至於降低了被通過的可能性,但由於其所包含的新思想,投票結果以壓倒多數的意見認為推遲對該建議的決定。
 
隨後,在眾人的幫助之下,包括 Bjarne Stroustrup 在內,Stepanove 又對 STL 進行了改進。同時加入了一個封裝內存模式信息的抽象模塊,也就是現在 STL 中的 allocator,它使 STL 的大部分實現都可以獨立於具體的內存模式,從而獨立於具體平台。在同年夏季的滑鐵盧會議上,委員們以 80% 贊成,20% 反對,最終通過了提案,決定將 STL 正式納入 C++ 標準化進程之中,隨後 STL 便被放進了會議的工作文件中。自此,STL 終於成為了 C++ 家族中的重要一員。
 
  • Allocator的本質就是一個封裝了內存模式的抽象模塊
 
此後,隨著 C++ 標準的不斷改進,STL 也在不斷地作著相應的演化。直至 1998 年,ANSI/ISO C++ 標準正式定案,STL 始終是 C++ 標準中不可或缺的一大部件。
 
  • STL 資料結構
  • 各版本通用
  • vector
  • list
  • set
  • multiset
  • map
  • multimap
  • stack
  • queue
  • priority_queue
  • C++11 以後標準 (使用這些須小心版本不支援)
  • array
  • deque
  • forward_list
  • unordered_set
  • unordered_multiset
  • unordered_map
  • unordered_multimap
 
  • STL vector
  • 功能跟內建的陣列很像,但是多了一些額外的函式可用
  • using namespace std;
  •  
  • int main()
  • {
  •     vector<string> ve_a; // 基本的宣告方法
  •  
  •     // 可用 typedef 幫型態取別名
  •     typedef vector<string> VEC_STR;
  •     VEC_STR ve_b;
  •  
  •     ve_a.assign( 3, "use assign" );
  •     ve_b = ve_a;  // 使用等號指定
  •  
  •     /*
  •         取得 vector 內的個別元素
  •         1. at(int)
  •           - 會嚴格檢查範圍,出錯馬上程式丟出 Exception out_of_range
  •         2. [int]
  •           - 不會嚴格檢查範圍,和普通的陣列一樣
  •     */
  •     cout<<ve_a.at(0)<<endl; // 使用 at 函數取得值
  •     cout<<ve_b[1]<<endl;
  •  
  •     /*
  •         指定資料進 vector
  •         該元素必須已經存在
  •     */
  •     ve_a.at(0) = "hello";
...
1459 days ago
Unfiled. Edited by 戴均民 1459 days ago
11月26日
 
戴均民
  • 第一次 CPE 考試
  • 2013/12/03 (二) 14:25 開始報名
  • 2013/12/13 (五) 18:00 報名截止
  • 2013/12/17 (二) 考試
  • 17:30-17:40 報到 - 18:00 之後不得入場
  • 17:40-18:30 練習
  • 18:40-21:40 考試
  • 考試地點:
  • 國立中興大學/水土保持學系 2 館 216 室
 
  • 宣告指標
  • 變數前面使用 & 符號取得記憶體位址
  • 宣告指標
  • <type> * ptr;
  • int *iptr;
  • char *cptr;
  • double *dptr;
  • 宣告時同時指定值
  • int ia;
  • int *ptr1 = &ia; // ptr1 是第一種指定方法
  • int *ptr2;
  • ptr2 = &ia; // ptr2 是第二種指定方法
  • 取得指標的值
  • using namespace std; 
  •  
  • int main() { 
  •     int var = 10; 
  •     int *ptr = &var;
  •  
  •     cout << "指標ptr儲存的值:" << ptr << endl; 
  •     cout << "取出ptr指向的記憶體位置之值:" << *ptr << endl;
  •  
  •     return 0; 
  • }
  • 設定指標的值
  • using namespace std; 
  •  
  • int main() { 
  •     int var = 10; 
  •     int *ptr = &var ; 
  •  
  •     cout << "var = " << var << endl; 
  •     cout << "*ptr = " << *ptr << endl; 
  •  
  •     *ptr = 20; 
  •  
  •     cout << "var = " << var << endl;
  •     cout << "*ptr = " << *ptr << endl;
  •  
  •     return 0; 
  • }
  • 同時宣告兩個指標
  • int *ptr1, *ptr2;
  • // 非 int *ptr1, ptr2;
  • 宣告指標但不指定初值,則指標指向的位址是未知的,存取未知位址的記憶體內容是危險的
  • int *ptr; 
  • *ptr = 10;
  • 特殊的 void* 指標型態 (代表變數型態不重要,重要的只是位址)
  • void* ptr;
  • cout << *( (int*) ptr ) << endl; // 取得或設定資料前須先轉換型態
  • 指標的運算
  • using namespace std; 
  •  
  • int main() { 
  •     int *ptr = 0; // 測試不同型態
  •  
  •     cout << "ptr位置:" << ptr << endl;
  •     cout << "ptr+1:" << ptr+1 << endl; 
  •     cout << "ptr+2:" << ptr+2 << endl;
  •  
  •     return 0; 
  • }
 
  • 指標與陣列的關係
  • 陣列記憶體位置的觀察
  • using namespace std; 
  •  
  • int main() { 
  •     int arr[10] = {0}; 
  •     cout << "arr :\t\t" << arr << endl; 
  •     cout << "&arr[0]: \t" << &arr[0] << endl; 
  •     return 0; 
  • }
  • 利用指標存取陣列
  • using namespace std; 
  •  
  • int main() {
  •     const int length = 5;
  •     int arr[length] = {10, 20, 30, 40, 50}; 
  •     int *ptr = arr; 
  •  
  •     // 以指標方式存取資料 
  •     for(int i = 0; i < length; i++) {
...
1461 days ago
Unfiled. Edited by 戴均民 1461 days ago
戴均民 出席:龐在偉、張培堯、邱冠喻、黃川哲、鄭涵德
 
  • 主題分配
 
如果有不能出席,趕快跟我說。
 
難易度分析:
在偉:DCABE
川哲:DCBAE
涵德:DACBE
冠喻:DBAEC
培堯:DCBAE
均民:DCABE
 
1470 days ago
Unfiled. Edited by 戴均民 1470 days ago
 
本文章會描述本系統的各方面功能。
 
 
  • 3.26. Choice Management and Authority Control (選項管理及權威控制)
這是一個可以配置的框架,可以讓你指定一個 Plugin 的 Class 來控制某個後設資料欄位的選項,這個也允許你使某個欄位的純文字資料中包含 Authority 的資料。這個選項的控制系統包含 Configurable Submission UI 和 Admin UI (編輯 Item 的頁面),可以幫助用戶選擇後設資料。
 
3.26.1. Introduction and Motivation (簡介及動機)
 
定義
 
  • Choice Management
這是一個可以為指定的欄位自動產生一個可選資料清單的機制。根據你指定的 Class 的實現,最後呈現的選項清單可能是由可能的值或查詢所組成,或者,可能一直提供一個固定的清單。同時,還可以設定這個欄位的開放性(close 代表該欄位只能選擇清單內的項目,反之 open 則是可填清單以外的項目,允許使用者新增選項)。
 
  • Authority Control
這個功能除了提供選項管理以及提供權威選項清單以供選擇之外,還可以同時將資料儲存至指定的後設資料欄位中,任何的權威控制欄位其本質上也都要被控制可填寫的資料。
 
關於權威控制
 
權威控制有以下的優點:
  1. 透過比較 Authority Keys 來判斷兩個值是否相等會很自動而且簡單。
  • 只根據字面進行比較時,可能會發生 false positive (兩個不同的人可能因為縮寫相同而被當作是相同的人)
  • 反之,也有可能出現名字不同,但是卻是同一個人的情況。(例如:John Smith 可以縮寫成 J. Smith)
  1. 幫助輸入正確的後設資料:Submission 和 Admin UI 可以使用 Authority 清單來檢查資料,並且幫助使用者選擇正確的值。
  1. 更好的互動性:只要將 DSpace 的 Authority 資料與其他應用程式分享,會更簡潔的於不同程式之間互動。
  • 舉例來說,DSpace 跟校園的社交網路分享 Authority 的資料,讓校園的社交網路可以顯示某個作者在系統中的所有收錄項目,而不只是簡單的使用姓名搜尋。
  • 當姓名權威被分享到校園通訊錄之中,那麼 DSpace 就可以自動根據作者的電子郵件,自動通知使用者他們的著作被其他人收錄到系統中。這樣作者就不需要先擁有一個 EPerson。
  1. Authority keys 在網頁上通常是隱藏的,只有在修改後設資料的時候才可以看到。這個值通常是對使用者或者是網站的遊客沒有任何意義的。權威控制和已經在 Submission UI 的 Vocabulary of Keywords 控制不一樣。
  1. Authorities 是整個組織內可以使用的,而不是僅限於 DSpace,通常這份資料會儲存在外部的資料庫或是網路資源。
  • Plugin 的架構讓 Authorities 可以很簡單的被實做,而不需要更改到任何核心的程式碼。
  1. 這個 Authority 的方案會影響所有後設資料層面的管理。
  • Keyword Vocabularies 只有在 Submission UI 有用。
  • Authority Control 會在任何後設資料修改的時候,進行 Asserted (發生效力)。包括批次上傳,LNI 和 SWORD Package 上傳,還有管理界面。
 
Authority 權威就是在一個給定範圍中的一組固定的值,每個值都有一個獨立的 key 進行識別。
例如 OCLC LC Name Authority Service。
Authority Record 與 Authority 中某個值相關連的資訊,可能是其他的拼法,縮寫,或者是翻譯…等
Authority Key 一個不透明,永久有效的(期望),並且能夠在某份 Authority 中識別所對應的紀錄的 Key
 
 
1470 days ago
Unfiled. Edited by 戴均民 1470 days ago
  • DSpace Development 列表:和本系統的開發者一起討論。這個地方是給本系統的開發者分享新的想法並且討論程式碼的更動。歡迎參與討論讓這個系統變得更好。DSpace 系統的前景取決於大家的需求、更好的架構、更有效的程式、重複測試、寫教學文件。
 
 
 
1487 days ago
Unfiled. Edited by 戴均民 1487 days ago
10月22日→10月29日
 
戴均民
  • 宣布事項
  • 從下次開始,因期中考暫停。下一次上課為 11月19日(二)
  • 期中考後預計舉辦一場解題黑客松
  • 時間:11月17日(日)下午 13:00~18:00,然後在一起吃晚餐
 
  • 宣告函式
 
  • 遞迴(recursive)
 
  • 函式計數器
  • 選擇、氣泡排序法(遞迴)
 

Contact Support



Please check out our How-to Guide and FAQ first to see if your question is already answered! :)

If you have a feature request, please add it to this pad. Thanks!


Log in