類内資料成員允許賦預設值。
c11以前是會報錯的。iso c++ forbids initialization of member `name_var_'
lambda表達式本質上是一個未命名的内聯函數。
很多語言都提供了 lambda 表達式,如 python,java 8。lambda 表達式可以友善地構造匿名函數,如果你的代碼裡面存在大量的小函數,而這些函數一般隻被調用一次,那麼不妨将他們重構成 lambda 表達式,簡化程式設計。
lambda 格式:[capture list](parameter list)->return type {function body}
我們可以忽略參數清單和傳回類型,但必須永遠包含捕獲清單和函數體。
regex
c98中,通過rand()函數生成随機數。c 11使用 default_random_engine 類 和 相應的分布類。
cpp中,動态記憶體的管理是通過new、delete這一對操作實作的。delete操作的時機很難正确的把握,是以c11引入了智能指針,smart pointer,本質是模闆類。
shared_ptr允許多個指針指向同一個對象。
unique_ptr獨占所指的對象。
最安全的配置設定和使用動态記憶體的方法是調用make_shared庫函數,它負責在堆中申請動态對象并傳回智能指針。
每個智能指針都自動的維護着一個引用計數,若減為0,則自動調用對象的析構函數釋放記憶體,不需程式員進行delete操作。當指向一個對象的最後一個shared_ptr銷毀時,該對象也會被銷毀。
shared/unique _ptr二者都支援的操作
shared_ptr<t> p或 unique_ptr<t> p
空智能指針,可以指向類型為t的對象
p
若p指向一個對象,p為true,可用于if(p)判斷
*p
解引用p,獲得它指向的對象,類似普通指針
p->member_object
等價于(*p).member_object
p.get()
傳回p中儲存的指針。要小心使用,若智能指針釋放了對象,傳回的指針所指的對象就也消失了
shared_ptr 獨有的操作
make_shared<t>(args)
根據args參數建立t類型動态對象,然後傳回shared_ptr 對象
shared_ptr<t> p(q)
p是q的拷貝;此操作會遞增q中的計數器。初始化要求類型相容。
p=q
p的引用計數減一,q的引用計數加一
p.use_count()
傳回與p共享對象的智能指針數量
p.unique()
若p.use_count()為1,傳回true,否則是false。
更簡單的for語句,用于周遊序列或容器的元素,并執行特定操作。
文法為 for(declaration:expression) statement 即for(變量:序列) 語句
c11允許使用大括号括起來的初始值清單給對象指派。
vector<int> v;v={1,1,2};
這在c11以前是錯誤的。
隻是新特性,不涉及關鍵字。委托構造函數使用所在類的其他構造函數,來完成初始化過程。優點就是少敲鍵盤。
數值類型轉string
string to_string (int val);//long、float、unsigned int 等資料類型的重載也都有。
string轉數值類型
int stoi (const string& str, size_t* idx = 0, int base = 10);
unsigned long long stoull (const string& str, size_t* idx = 0, int base = 10);
類似的,還有stod double、stof float、stoi int、stol long、。。。