淺析std::string的append方法

string內部有多個append函數,我們就拿其中一個來說(基本原理都一樣)。

其中第一步中的if (_Count <= _Mypair._Myval2._Myres - _Old_size)可以翻譯爲
如果(加入的字符大小<= 當前大小 - 已存在的字符佔用大小) ,其內部直接就是將我們append的字符複製進的當前的數組內。

第二步其實就很簡單,重新創建一個滿足需求大小的數組並將之前的數據和我們append添加的數據拷貝進去。那麼創建的數組大小是多少呢,我們來看這個函數,這是第二部跳轉到的函數內部

 

其中新創建的數組大小正是剪頭所指的地方調用的函數返回結果,那麼我們來看看這個函數

其中的_ALLOC_MASK是個三目運算符返回的結果,結果爲15,而_Requested就是傳參進來的_New_size,_New_size     = _Old_size + _Size_increase。那麼就是原本的(數組的大小 + 添加的數據大小) | 15,而最後的那個_Max_value也是一個三目運算符,返回的是兩個參數中最大的那一個,那麼創建的數組大小就很明確了,
結果大小有兩個 :
1. 當前string內的字符大小 + 添加的數據大小 + n( n <=15 );
2. 當前string的最大容量大小 + 當前string的最大容量大小 / 2.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章