閱讀60 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++ 11 新特性

C++ 11  新特性

類內成員賦初值

類內數據成員允許賦默認值。

C11以前是會報錯的。ISO C++ forbids initialization of member `name_var_'

lambda表達式

lambda表達式本質上是一個未命名的內聯函數。
很多語言都提供了 lambda 表達式,如 Python,Java 8。lambda 表達式可以方便地構造匿名函數,如果你的代碼裏麵存在大量的小函數,而這些函數一般隻被調用一次,那麼不妨將他們重構成 lambda 表達式,簡化編程。
lambda 格式:[capture list](parameter list)->return type {function body}
我們可以忽略參數列表和返回類型,但必須永遠包含捕獲列表和函數體。

 regex

regex

 random

C98中,通過rand()函數生成隨機數。C 11使用 default_random_engine 類 和 相應的分布類。

 智能指針

cpp中,動態內存的管理是通過newdelete這一對操作實現的。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語句,用於遍曆序列或容器的元素,並執行特定操作。

語法為  for(declaration:expression) statement  即for(變量:序列) 語句

 大括號賦值


c11允許使用大括號括起來的初始值列表給對象賦值。
 vector<int> v;v={1,1,2};

這在c11以前是錯誤的。

委托構造函數

隻是新特性,不涉及關鍵字。委托構造函數使用所在類的其他構造函數,來完成初始化過程。優點就是少敲鍵盤。

class A{
	private:
	int a,b;
	public:
	A(int a,int b){this->a=a,this->b=b;}
	A(int x):A(x,2){}
	#ifdef c98
	//error: type `class A' is not a direct base of `A'
	#endif
};

string與數值類型 互轉

數值類型轉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、。。。
 

最後更新:2017-04-03 05:39:19

  上一篇:go 【北大夏令營筆記-並查集】poj1988-Cube Stacking
  下一篇:go 數據庫設計