1. 程式人生 > >Item 54:熟悉一下標準庫,比如TR1

Item 54:熟悉一下標準庫,比如TR1

Item 54: Familiarize yourself with the standard library, including TR1.

C++這個名字是在1983年由Rick Mascitti提出的,C++的曾用名還有”new C”, “C with Classes”。 1998年ISO/IEC 14882釋出了第一個C++標準,就是我們常講的C++98。後續的標準還包括C++03,C++TR1,C++11,C++14。 值得一提的是C++11標準,它已經被主流編譯器支援。包含了核心語言的新機能,而且擴充套件C++標準程式庫,併入了大部分的C++ TR1程式庫。 Effective C++ Edition 3中大部分std::tr1都可以在std下直接訪問了。

我們來回顧一下C++98中的內容:

  • STL(standard template library),包括容器迭代器和演算法。
  • IOstream,支援標準IO,使用者定義IO,以及預定義物件:cin, cout, cerr, clog。
  • 國際化支援。如wchar_t為16位Unicode字元。
  • 數字處理。加入了complex, valarray等。
  • 異常成績。包括基類exception, 子類logic_error, runtime_error等。
  • C89的標準庫。1989年的C標準庫都併入了C++98。

Effective C++ Edition 3中提到了很多TR1(technical report 1)的概念:

  • 智慧指標:TR1::shared_ptr, TR1::weak_ptr, TR1::auto_ptr等,見Item 13
  • TR1::function:可以代表一個可呼叫的實體,可以是函式、函式物件等,見Item 35
  • TR1::bind:將某個函式繫結到某個物件上(即替換this),見Item 35
  • 雜湊表:TR1::unordered_set, TR1::unordered_multiset, TR1::unordered_map, TR1::unordered_multimap。

正則表示式

  • 元組:在STL中本已有一個pair模板來包含兩個元素,在TR1中提出了不限元素數量的TR1::tuple。
  • TR1::array:STL風格的陣列。
  • TR1::mem_fn:提供了統一的方式來適配成員函式指標。
  • TR1::reference_wrapper:使得引用更像一個物件,原本在容器中只能儲存指標和物件的。
  • 隨機數:C++的rand來自於C89標準中,TR1給出了更好的隨機數演算法。
  • 特殊數學函式:拉格朗日多項式、貝塞爾函式、橢圓積分等。
  • C99相容的擴充套件:引入了很多C99的特性。
  • 型別特徵(traits):一個類模板,用來在編譯期標識型別資訊,見Item 47
  • TR1::result_of:一個模板,用來推導函式呼叫的返回型別。
    Boost是一個值得我們去探索的社群,TR1中14個部分有10個是從Boost社群來的。Boost提供給的是一個模板庫,只需要指定INCLUDE PATH即可, 安裝Boost甚至不需要build。因為TR1裡的特性在Boost基本都有,你可以告訴你的編譯器把tr1當做boost:
namespace std{
    namespace tr1 = ::boost;
}

Item 25中提到,如果你在std下私自新增東西會導致未定義行為。但上述的程式碼在實踐中通常沒什麼問題。
總之,標準C++庫是由STL, iostream, 本地化,C99組成的。TR1添加了智慧指標、通用函式指標、雜湊容器、正則表示式以及其他10個元件。 TR1在是一個標準(standard),為了使用TR1你需要一個TR1的實現(implementation),Boost就是一個很好的TR1實現。

相關推薦

Item 54熟悉一下標準比如TR1

Item 54: Familiarize yourself with the standard library, including TR1. C++這個名字是在1983年由Rick Mascitti提出的,C++的曾用名還有”new C”, “C with

Item 55熟悉一下Boost

Item 55: Familiarize yourself with Boost. Boost是一個C++開發者的社群,作為C++標準的試驗場, 收容了很多高質量、開源的、跨平臺、獨立於編譯器的C++庫, 包括許多TR1元件的實現。 Boost是其他C++

node js實戰帶數據加密的註冊登錄表單

settings else input 是否 rip dig code setting 個人 demo 註冊效果: 登陸效果: 數據庫截圖: 數據庫操作 db.js //這個模塊裏面封裝了所有對數據庫的常用操作 var MongoClient =

Pythonpip 安裝第三方速度很慢的解決辦法

場景 想安裝 Django 庫 在 cmd 敲入命令 pip install Django 但是發現下載安裝檔案非常慢 原因:實質訪問的下載網站是 https://pypi.Python.org/simple/ 這是一個國外網站,速度比較慢   解決辦法 使用國

FastjsonJava高效能JSON序列化與反序列化

Fastjson是一個Java語言編寫的高效能功能完善的JSON庫。它採用一種“假定有序快速匹配”的演算法,把JSON Parse的效能提升到極致,是目前Java語言中最快的JSON庫。Fastjson介面簡單易用,已經被廣泛使用在快取序列化、協議互動、Web輸出、And

python編寫RF外匯入自己定義的關鍵字

1.__init__.py 檔案from M import M class MonkeyLibrary(M):      ROBOT_LIBRARY_SCOPE='GLOBAL' 注意:①class的

JDBC操作數據比如修改電商數據中的分類的id讓各商品隨機

url spa creates 需要 stat 句柄 獲取 amp statement 1 package CRM; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 impo

學習element中覺得得多封裝一下一些函式比如form驗證

學習vue中,用element作為ui框架,發現很多函式都是非同步,或者是巢狀型別,為了使程式碼更簡潔些,我以form表單的validate作例子 原先函式是這樣 this.$refs[formName].validate((valid) => { //這裡面寫

Linux下添加自定義腳本到開機自啟動標準rpm舉例設置Apache自啟動

不同 config desc 完全 def chkconfig mod etc chm 寫一個腳本,名字為:autostart.sh,放在/etc/init.d/目錄下,賦予權限chmod +x /etc/init.d/autostart.sh 代碼如下 #!/bin/sh

Python標準內置函數all(iterable)

blog ack div class pos true pop 使用 實現 假設可叠代的對象的所有元素所有非空(或者空叠代對象),就返回True。這個函數主要用來推斷列表、元組、字典等對象是否有空元素。比方有10000個元素的列表,假設沒有提供此函數,須要使用循環來實現

Python標準內置函數dict(mapping, **kwarg)

rom 宋體 class pan blog 映射類型 sni roman art 本函數是從一個映射函數對象構造一個新字典。與dict(**kwarg)函數不一樣的地方是參數輸入是一個映射類型的函數對象,比方zip函數、map函數。樣例:#dict() #以鍵對方式構造

Python 基礎 - Day 5 Learning Note - 模塊 之 標準datetime (2)

基礎 格式 時間 日期和時間 bin att class ext one 介紹 Datetime 模塊是time模塊的再次封裝,提供了更多的接口。主要是日期和時間的解析,格式化及運算。 其他關於時間的模塊: time - basic calendar - basic

python標準datetime模塊

times 詳細 包括 面向對象 www. pos down 基礎 構造函數 原文地址:http://www.bugingcode.com/blog/python_datetime.html datatime 模塊題共用一些處理日期,時間和時間間隔的函數。這個模塊使用面向對

spring mvc常用標簽(文本框密碼框文本域復選框單選按鈕下拉框隱藏於上傳文件等)

標簽庫 state -h ring lib ati gap 下拉列表 hiberna 在jsp頁面需要引入:<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>標簽. 文

標準模塊re 正則表達式

分隔 dota group () find ear multi lag pro 1 ‘.‘ 默認匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行 2 ‘^‘ 匹配字符開頭,若指定flags MULTILINE,這種也

【python標準學習】threadthreading(一)多線程的介紹和使用

超時 targe 同步問題 線程 線程同步鎖 定義類 查看 兩個 key 在單個程序中我們經常用多線程來處理不同的工作,尤其是有的工作需要等,那麽我們會新建一個線程去等然後執行某些操作,當做完事後線程退出被回收。當一個程序運行時,就會有一個進程被系統所創建,同時也會有一個線

USART與USB接收不定數據方法標準、HAL都適用

文件中 修改 .com 適用於 判斷 清0 服務函數 res image 很多時候,我們使用串口或USB接收數據時,往往不知道PC端會發多長的數據下來, 為了解決這個不定數據接收問題,在此各提供一個解決思路。 串口數據不定接收:   由於STM32單片機帶

Mad Libs遊戲熟悉python編程環境基本輸入輸出

.com inpu int 姓名 基本輸入輸出 輸入 light class pri name1=input(‘請輸入姓名‘) name2=input(‘再輸入姓名‘) print(‘{}說我就算餓死,死這裏,從6樓跳下去,也不吃同德一口飯。\n第二天,{}和{}一起在同

小編帶你簡單了解一下加密技術原理AES加密標準

數據 aes加密 體制 結構 方向 插值 空間 基於 領域 隨著因特網的發展,信息傳輸及存儲的安全問題成為影響因特網應用發展的重要因素。信息安全技術也就成為了人們研究因特網應用的新熱點。 信息安全的研究包括密碼理論與技術、安全協議與技術、安全體系結構理論、信息對抗理論與技術

標準之timerandomsysos

時間轉換 os.path 1-1 隨機數 int 平臺 sta .get color # import time # print(time.time()) # 時間戳 # print(time.mktime(time.localtime()))