我對洗掉資料庫功能代碼感到兩難。
每當我洗掉具有唯一性的向量中的資料庫時,我想不出撰寫可以用洗掉的數字填補空白的代碼(就像我洗掉了資料庫 ID3 并且我希望其他資料庫的 ID 會增加以具有穩定的序列,所以ID4 的資料庫將變為 ID3)。
我也不知道如何減少我的靜態 int 計數器。
檔案:
**void Database::Rem()
{
int dddddet;
cin >> dddddet;
if (iter != DbMain.end())
{
DbMain.erase(iter);
}
}**
std::istream &operator>>(std::istream &re, Base &product)
{
}
}
std::ostream &printnames(std::ostream &pr, Base &pro)
{
pr << "\nID:" << pro.ID << "\nName:" << pro.name;
return pr;
}
頭檔案:
"
uj5u.com熱心網友回復:
你在這里做的事情被稱為設計反模式:一些你可以在很多情況下很容易提出的結構性想法,但這會帶來很多麻煩(即不好)。它被稱為單例:您假設只有一個 DbMain,因此您將其長度存盤在“全域相似”靜態成員中。沒有意義!只需使用 DbMain 的長度。無論如何,您永遠不需要全域或靜態成員來計算集中存盤的物件。
您實際上不需要將 ID 作為您存盤的物件的一部分——它的全部目的是作為dBMain存盤中的索引。已經訂購了一個矢量!因此,不要在遍歷向量時列印 .ID,而只需列印向量中的位置。您可以“洗掉 (DbMain.begin() N) 元素”并完成它,而不是“找到 ID == N 的基礎并擦除”。
uj5u.com熱心網友回復:
您的設計中的問題是,當您使用靜態計數器初始化 ID 時,您似乎以某種方式將唯一 ID 與向量中的索引相關聯。這不是一個好主意,因為:
- 您需要在每次洗掉時重新編號大量 ID,這將使維護交叉參考變得非常困難。
- 你可以有幾個資料庫,每個資料庫都有自己的一組 id。
- 如果在不讀取堿基的情況下添加堿基,則存在無法將計數器設定為正確值的風險。
此外,按順序迭代查找 ID 效率不高。一種更有效的方法是將您的堿基存盤在 a 中std::map:這允許非常有效地查找 ID,通過 ID 而不是序列號進行索引。
然后,您唯一關心的是確保 ID 的唯一性。當然,如果您確保在創建新基礎時更新它,并且將狀態與您將保存所有這些的文本檔案中的資料庫一起保存,那么您的計數器方法可能會起作用。您只需要明確 ID 不保證是連續的。確保有助于這種理解的一種實用方法是在嘗試洗掉未找到的記錄時發出錯誤訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482914.html
上一篇:全域整數替代
