簡體   English   中英

如何避免重復代碼?

[英]how to avoid repeating code?

我有一個技術問題,我在工作中重復了代碼,我想擺脫它,所以我知道在C ++中使用宏不是一個好主意,但是我必須使用內聯函數,這是一個好主意將此函數用作內聯:

list<Data>::iterator foo(int data){
if(dataExists(data)){
    list<Data>::iterator i;
    for(i = dataClass.begin(); i != dataClass.end(); ++i){
       if(i->getData() == data){
        break;
       }
return i;   //here I have one more problem, what can I return if data doesn't exist?
}

我是新手,我認為此功能非常不安全,請有人給我建議,如何改善我的代碼,謝謝

PS:通常使用什么來避免重復代碼?

我編輯了代碼

您在這里所做的事情已經由std::find()函數完成,因此使用它會更好(盡管嘗試練習自己實現這些功能當然可以)。

std::find()還演示了一種指示“未找到”條件的好方法-如果未找到該項目,它將返回迭代器的一端。 這樣,調用者可以通過將返回的迭代器與Data.end()進行比較來確定是否找到了匹配項。

您發布的代碼沒有意義。 一方面,您將Data用作類型,另一方面,將Data用作對象。 假設它是一個對象,則指示未找到某些內容的方法將是返回指向其末端的迭代器。

return Data.end();

但是您的代碼太混亂了,無法進行重大更改。

您不會通過在SO上發布問題來學習C ++-這根本無法完成。 相反,您需要閱讀一本不錯的C ++教科書-我建議您使用Accelerated C ++ ,該書詳細介紹了迭代器之類的內容。 如果您進行這樣的提問,那簡直就是在浪費時間,更重要的是浪費我們的時間。

我真的不知道您在這里問什么,但是您的帖子中存在一些誤解。

第一個內聯函數是一個特定的優化,您現在還不需要在意。 首先了解正常功能並正確理解它們。

就像已經回答的另一個答案一樣, std::find()完成了您似乎想做的事情。 它不一定必須是列表的成員才能工作,實際上,現代C ++樣式指南通常更喜歡非成員函數。

現在到您的代碼。 我非常確定您發布的代碼無法正常工作的C ++代碼,這使得您很難理解您要執行的操作。 您使用的列表類型也不是std::list<> (迭代器的工作方式不同),並且您將Data用作變量(在代碼中未定義)和類型。

正如有人已經建議的那樣,也許您應該更輕松一些,或者更好一點,為C ++初學者准備一本好書 (我推薦“ Accelerated C ++”和“使用C ++編程P&P”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM