W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
雖然這段代碼可以工作,但它本可以組織的更好。既然我們已經寫了一個原型,那么我們就處于評價其設計并改進之的有利位置了。
那現在的代碼有些什么問題呢?
我們提前不知道要創(chuàng)建多大的距離矩陣,所以我們選擇了一個任意大的數字(50),然后創(chuàng)建了一個固定大小的矩陣。更好的方式是允許距離矩陣以類似Set的方式擴充,而apmatrix類的resize函數使之成為可能。
下面是DistMatrix類頭文件大概形式的一個草稿:
class DistMatrix {
private:
Set cities;
apmatrix<int> distances;
public:
DistMatrix (int rows);
void add (const apstring& city1, const apstring& city2, int dist);
int distance (int i, int j) const;
int distance (const apstring& city1, const apstring& city2) const;
apstring cityName (int i) const;
int numCities () const;
void print ();
};
我們可以使用這個接口來簡化main函數:
void main ()
{
apstring line;
ifstream infile ("distances");
DistMatrix distances (2);
while (true) {
getline (infile, line);
if (infile.eof()) break;
processLine (line, distances);
}
distances.print ();
}
也可以簡化 processLine函數:
void processLine (const apstring& line, DistMatrix& distances)
{
char quote = ’\"’;
apvector<int> quoteIndex (4);
quoteIndex[0] = line.find (quote);
for (int i=1; i<4; i++) {
quoteIndex[i] = find (line, quote, quoteIndex[i-1]+1);
}
// 將行分割為子串
int len1 = quoteIndex[1] - quoteIndex[0] - 1;
apstring city1 = line.substr (quoteIndex[0]+1, len1);
int len2 = quoteIndex[3] - quoteIndex[2] - 1;
apstring city2 = line.substr (quoteIndex[2]+1, len2);
int len3 = line.length() - quoteIndex[2] - 1;
apstring distString = line.substr (quoteIndex[3]+1, len3);
int distance = convertToInt (distString);
// 將新數據添加到距離矩陣中
distances.add (city1, city2, distance);
}
我把實現DistMatrix類的成員函數留作練習請讀者完成。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: