一.構造函數
????????
? ? ? ? 我們來看一下,string的底層就是一個字符型指針和一個size來表示string的大小,capacity來表示分配的內存大小。
? ? ? ? 我們來看我們注釋掉的第一個構造函數,我們是通過初始化列表來初始化size的大小,再通過size的大小來初始化其他兩個變量的,為什么圖中要多給_str開一個空間呢,這是因為要存放\0的原因。
? ? ? ? 注釋掉的第二個是無參構造,我們發現可以使用缺省參數來合并成為一個構造函數。
? ? ? ? 我們給的缺省值是一個空字符串,但是在下面我們給過它空間之后就會自動有一個\0了,所以不需要我們手動給它\0的值。
? ? ? ? 就是通過一個char*類型的指針來接收我們給的字符串的,然后通過構造函數完成初始化的,通過strcpy拷貝過去。
????????
二.c_str
????????
????????這個的作用就是我們在使用string的時候創建的是類對象,但是我們要兼容c語言,所以我們也要把我們的string串轉換為char* 類型的數組,使它可以和c語言兼容。
? ? ? ??
? ? ? ? 三.reserve
? ? ? ? 我們都只寫它們的主要功能,這個函數的主要功能就是擴容,就是我們的如圖所示,多給了一個空間的原因上面說過了,是因為要存放\0的,這個就是我們新申請一塊空間,然后把內容拷貝過去,然后再釋放原來的空間,讓它指向新的空間即可完成擴容的操作了。
????????
? ? ? ? 四.push_back
????????
? ? ? ? 這個的實現就是先檢查是否需要擴容,其次再插入字符,把size++,再把\0的位置給一下。
????????
? ? ? ? 五.append
????????
? ? ? ? 這個strcpy每次先找到\0,然后才會把內容從\0的位置賦值過來,str+size,我們直接幫助它找到了\0的位置,更加高效。
? ? ? ? 這個就是先二倍擴容看看符合不符合要求,然后不符合再次擴容即可。
? ? ? ? 六.operator+=
? ? ? ? 這個我們將介紹兩種,都是常用的。
????????
? ? ? ? 這兩個復用了上面的代碼一個是+=一個字符的,一個是+=一個字符串的。
? ? ? ? 七.insert
????????
? ? ? ? 這個我們將介紹兩種用法的底層,這是第一種。
????????不能從前往后挪動,因為數據可能被覆蓋,只能從后往前挪動了。
? ? ? ? 這個也是先擴容,然后先從后往前把字符全部向后挪動n個位置,給需要的地方騰出n個位置,然后通過一個count來控制這個ch的個數,然后把那些空位置填上去即可。
? ? ? ? 還沒有寫完先發出來,明天或者后天博主就會全部發出來。
? ? ? ? 八.結束語
?????????感謝大家的查看,希望可以幫助到大家,做的不是太好還請見諒,其中有什么不懂的可以留言詢問,我都會一一回答。? 感謝大家的一鍵三連。