實習目標 |
1. 使用 string 與 vector 類別物件所提供的功能
2. 使用 C++ 標準函式庫中所提供 sort() 及 find() 演算法 3. 使用 C++ 標準函式庫中所提供物件的界面 4. 熟悉透過界面描述物件功能的抽象化描述方法 |
---|---|
步驟一 |
在 C++ 的標準函式庫中,
string 是一個取代 C 中字串 (字元陣列) 的類別(你可以先想成是一種資料型態),
vector 則是取代 C 中陣列的類別,
運用這兩個類別來寫程式的話,
可以省掉很多不必要的錯誤。
string 類別的基本使用範例如下: #include <string> using namespace std; string s1, s2; // empty strings string s3 = "Hello, World."; // initialized string s4("I am"); // initialized char dest[100]; s2 = "today"; // string copy s1 = s3 + " " + s4; // concatenation of strings s1 += " 8 "; // appending to a sting cout << s1 + s2 + "!" << endl; // extended ostream strcpy(dest, s1.c_str()); // convert to char array cin >> s1; cout << s1.length(); // or s1.size(); if (s3 + s4 == "Hello, World.I am") { // do something } vector 類別的使用範例如下面這個課本上運用 string 與 vector 列印資料及列號的程式 // Thinking in C++ page 105 #include <iostream> #include <vector> #include <string> #include <iomanip> using namespace std; int main() { ifstream inf("AddLineNumber.cpp"); string line; vector<string> lines; while (getline(inf, line)) lines.push_back(line); for (int i=0; i<lines.size(); i++) cout << i << ":" << lines[i] << endl; return 0; } |
步驟二 |
請先修改上面這個課本中的範例程式來處理我們先前的 raw1.dat,
保留 vector 的使用,
但是請先宣告一個結構型態
struct DataRecord { int ordinalNumber; int value; };參考上一個步驟裡的範例, 設定 vector 的每一元素為 DataRecord, 例如: vector<struct DataRecord> recordArray; 或是 vector<DataRecord> recordArray;然後運用 iostream 的功能將 raw1.dat 檔案內的資料讀取到 recordArray 陣列中, 將每一筆資料在該檔案內的列號記錄在 ordinalNumber 那個欄位中, 將每一筆資料的內容記錄在 value 那個欄位中。 |
步驟三 |
請運用 sort()
函式將你在上一步驟讀到的 vector 物件進行排序
|
步驟四 |
請在上一步驟所作出來的程式中運用 find()
函式在排序過的 vector 資料裡尋找資料 {17, 8} 和 {60, 5} 兩筆資料, 並且列印結果出來
範例執行程式: SortVectorDataRecord01.exe (請下載後在命令視窗內執行) 請注意, 在使用 find() 函式時, 必須替 DataRecord 定義如何比較兩個資料結構是相等的, 這一部份你還沒有學到, 請按照下面的說明修改 struct DataRecord { .... bool operator==(const DataRecord& y); }; bool DataRecord::operator==(const DataRecord& y) { 請比較欄位 value 和 y.value 是相等的, 同時 ordinalNumber 和 y.ordinalNumber 是相等的 }find() 函式會傳回一個 vector |
步驟五 | 請將所完成的 project (去掉 debug/ 資料匣下的所有內容) 壓縮起來儲存在 cyber 上你的帳號內, 後面的實習課程可能需要使用這裡所完成的程式 |
回
C++ 物件導向程式設計課程
首頁
製作日期: 02/16/2004
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw
TEL: 02 24622192x6615
海洋大學
電機資訊學院
資訊工程系
Lagoon