原创 Effective STL:4、迭代器

乍看起來,STL 迭代器的概念似乎已經非常簡單了,然而再仔細看一看,你就會注意到,STL 標準容器實際上提供了 4 種不同的迭代器類型:iterator、const_iterator、reverse_iterator 和 con

原创 Effective STL:3、關聯容器

就像電影《綠野尋蹤》中的多色馬一樣,關聯容器是一些不同顏色的動物。不錯,它們和序列容器有很多相同的特性,但是在很多方面也有本質的不同。比如,它們會自動排序;它們按照等價而不是相等的標準來對待自己的內容;set 和 map 不允許

原创 Inside the C++ Object Model:6、執行期語意學

6.1 對象的構造和析構 全局對象 C++ 保證,一定會在 main() 函數中第一次用到 identity 之前,把 identity 構造出來,而在 main() 函數結束之前把 identity 摧毀掉。 局部靜態對象

原创 Inside the C++ Object Model:1、關於對象

在 C 語言中,“數據” 和 “處理數據的操作(函數)” 是分開聲明的,也就是說,語言本身並沒有支持 “數據和函數” 之間的關聯性。我們把這種程序方法稱爲程序性的(procedural),由一組 “分佈在各個以功能爲導向的函數中

原创 Inside the C++ Object Model:7、站在對象模型的尖端

7.1 Template 它甚至被使用於一項所謂的 template metaroprograms 技術: class expression templates 將在編譯時期而非執行期被評估,因而帶來重大的效率提升。 Tem

原创 Inside the C++ Object Model:5、構造、析構、拷貝語意學

純虛函數的存在 虛擬規格的存在 虛擬規格的 const 存在 重新考慮 class 的聲明 5.1 “無繼承” 情況下的對象構造 抽象數據類型 爲繼承做準備 5.2 繼承體系下的對象構造 虛擬繼承 vptr

原创 Effective STL:2、vector 和 string

所有的 STL 容器都是有用的,但對於大多數 C++ 程序員,你會發現使用 vector 和 string 的時候回更多一些。這是可以想見的。設計 vector 和 string 的目的就是爲了代替在大多數應用中使用的數組,而數

原创 Inside the C++ Object Model:4、Function 語意學

4.1 Member 的各種調用方式 Nonstatic Member Functions Virtual Member Functions Static Member Functions 4.2 Virtual Me

原创 Effective STL:1、容器

沒錯,STL 中有迭代器、算法和函數對象,但是對於大多數 C++ 程序員來說,最值得注意的還是容器。容器比數組功能更強大、更靈活。它們可以動態增長(和縮減),可以自己管理內存,可以記住自己包含了多少對象。它們限定了自己所支持的操

原创 Inside the C++ Object Model:2、構造函數語意學

2.1 Default Constructor 的構造操作 對於 class X,如果沒有任何的 user-declared constructor,那麼會有一個 default constructor 被隱式聲明出來。一個被

原创 c++ 關鍵字

關鍵字是組成編程語言詞彙表的標識符,它們不能用於其他用途。 下表列出了C++的關鍵字,其中粗體也是ANSI C99標準中的關鍵字。 alignas alignof asm auto bool break

原创 KMP算法解析

一、簡介 KMP 算法是用來求一個較長字符串是否包含另一個較短字符串的算法,其中難點在於求解 next 數組。 二、next 數組含義 next 數組含義爲:如果匹配到該字符時失敗,回溯的位置。 str a b a

原创 c++ 之字節對齊

一、類型字節數 系統平臺 16位 32位 64位 char 1 1 1 short 2 2 2 int 2 4 4 unsigned int 2 4 4 float 4 4 4 double 8

原创 c++ 運算符優先級

運算符優先級決定了運算符用於值的順序,C++運算符分爲18個優先級組。

原创 c++ 中編譯過程

一、編譯流程 C/C++ 程序編譯流程: 預處理->編譯->彙編->鏈接 具體的就是: 源代碼(source coprede)→預處理器(processor)→編譯器(compiler)→彙編程序(assembler) →目標程