持續更新中...
std::forward_list(單向鏈表)
std::forward_list為從++新增的線性表,與list區別在於它是單向鏈表。我們在學習數據結構的時候都知道,鏈表在對數據進行插入和刪除是比順序存儲的線性表有優勢,因此在插入和刪除操作頻繁的應用場景中,使用list和forward_list比使用array、vector和deque效率要高很多。
auto關鍵字及用法
auto並沒有讓C++成為弱類型語言,也沒有弱化變量什么,只是使用auto的時候,編譯器根據上下文情況,確定auto變量的真正類型。
nullptr關鍵字及用法
為什么需要nullptr? NULL有什么毛病?(函數重載)
NULL在c++里表示空指針,看到問題了吧,我們調用test.TestWork(NULL),其實期望是調用的是void TestWork(int * index),但結果調用了void TestWork(int index)。但使用nullptr的時候,我們能調用到正確的函數。
std::unordered_map(無序容器)
std::unordered_map與std::map用法基本差不多,但STL在內部實現上有很大不同,std::map使用的數據結構為二叉樹,而std::unordered_map內部是哈希表的實現方式,哈希map理論上查找效率為O(1)。但在存儲效率上,哈希map需要增加哈希表的內存開銷。
std::thread(線程)
std::thread為C++11的線程類,使用方法和boost接口一樣,非常方便,同時,C++11的std::thread解決了boost::thread中構成參數限制的問題(參數指針變為可以多參數),我想着都是得益於C++11的可變參數的設計風格。
std::shared_ptr
std::shared_ptr包裝了new操作符動態分別的內存,可以自由拷貝復制,基本上是使用最多的一個智能指針類型。
1、std::make_shared封裝了new方法,boost::make_shared之前的原則是既然釋放資源delete由智能指針負責,那么應該把new封裝起來,否則會讓人覺得自己調用了new,但沒有調用delete,似乎與誰申請,誰釋放的原則不符。C++也沿用了這一做法。
2、隨着引用對象的增加std::shared_ptr<Test> p2 = p1,指針的引用計數有1變為2,當p2退出作用域后,p1的引用計數變回1,當main函數退出后,p1離開main函數的作用域,此時p1被銷毀,當p1銷毀時,檢測到引用計數已經為1,就會在p1的析構函數中調用delete之前std::make_shared創建的指針。
std::weak_ptr
std::weak_ptr網上很多人說其實是為了解決std::shared_ptr在相互引用的情況下出現的問題而存在的