C++ articles:Guru of the Week #3:使用標準庫 (轉)
作者:Hub Sutter
譯者:plpliuly
/*此文是譯者出於自娛翻譯的GotW(Guru of the Week)系列文章第3篇,原文的版權是屬於Hub Sutter(著名的C++專家,"Exceptional C++"的作者)。此文的翻
譯沒有徵得原作者的同意,只供學習討論。——譯者
*/
#3 使用標準庫
難度:3/10
使用標準庫提供的演算法比你自己手工寫一個要方便的多。仍然以GotW #2中討論的定義為例子,我們將看到如果直接使用標準庫將會避免很多問題。
問題:
如果我們用標準庫中的已有演算法代替GotW#2中的最初程式碼中的迴圈,有哪些問題可以自然避免?(注意:與以前一樣,不能改變函式的語義。)
GotW #2中的問題回顧:
最初的實現:
string FindAddr( list
{
for( list
i != l.end();
i++ )
{
if( *i == name )
{
return (*i).addr;
}
}
return "";
}
經過修改後,除了l.end()依然是每次迴圈到要,其餘的不足之處均已修改(譯者:請參看GotW #2):
string FindAddr( const list
const string& name )
{
string addr;
for( list
i != l.end();
++i )
{
if( (*i).name == name )
{
addr = (*i).addr;
break;
}
}
return addr;
}
答案:
在最初的程式碼基礎上,僅僅用find()代替迴圈而不做任何其他的修改就可以避免兩個不必要臨時而且可以幾乎把初始程式碼中的對l.end()的冗餘呼叫全部
去掉:
string FindAddr( list
{
list
find( l.begin(), l.end(), name );
if( *i != l.end() )
{
return (*i).addr;
}
return "";
}
再結合我們在GotW #2中提到的修改方法,最終可以得到如下程式碼:
string FindAddr( const list
const string& name )
{
string addr;
list
find( l.begin(), l.end(), name );
if( i != l.end() )
{
addr = (*i).addr;
}
return addr;
}
[忠告]儘量使用標準庫演算法,因為那樣比自己手動重新寫一個演算法要快捷,而且不易出錯。
(結束)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C++標準庫、C++標準模版庫介紹C++
- C++標準庫C++
- C++標準庫:chronoC++
- C++標準庫:randomC++random
- c/c++ 標準庫 vectorC++
- C++ 標準庫 std::set std::multiset swap()的使用C++
- C++標準庫有四種智慧指標C++指標
- c/c++ 標準庫 迭代器(iterator)C++
- c/c++ 標準庫 map set 插入C++
- C++標準庫名字和標頭檔案--表C++
- C++學習筆記 — STL標準模板庫C++筆記
- Python標準庫14 資料庫 (sqlite3)Python資料庫SQLite
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- C++ 字串 cctype 標頭檔案標準庫處理函式C++字串函式
- 標準庫 fmt 包的基本使用
- 使用Profile標準化資料庫管理資料庫
- Go標準庫所有方法使用例子Go
- 超越C++標準庫:Boost庫導論電子書PDF下載C++
- C++:標準I/O流C++
- C++標準模板庫(STL)迭代器的原理與實現C++
- Go Web學習 -標準庫 net/http 使用GoWebHTTP
- C 標準庫 – string.h之strstr使用
- C 標準庫 – string.h之memchr使用
- C 標準庫 – string.h之strrchr使用
- C 標準庫 – string.h之memmove使用
- C 標準庫 – string.h之memcmp使用
- C 標準庫 – string.h之strspn使用
- C 標準庫 – string.h之strpbrk使用
- 使用.Net Core RT 生成標準動態庫
- Coursera課程筆記----C++程式設計----Week3筆記C++程式設計
- 標準庫之template
- python常用標準庫Python
- Go標準庫ContextGoContext
- C++標準庫中檔案流類的繼承關係C++繼承
- 模組轉測標準
- Go 標準庫之 GoRequests 介紹與基本使用Go
- 簡單介紹標準庫fmt的基本使用
- C++ 資源大全:標準庫、Web框架、人工智慧等 | 最全整理C++Web框架人工智慧
- golang標準庫之 fmtGolang