string的底層原理

一.構造函數

????????

? ? ? ? 我們來看一下,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的個數,然后把那些空位置填上去即可。

? ? ? ? 還沒有寫完先發出來,明天或者后天博主就會全部發出來。

? ? ? ? 八.結束語

?????????感謝大家的查看,希望可以幫助到大家,做的不是太好還請見諒,其中有什么不懂的可以留言詢問,我都會一一回答。? 感謝大家的一鍵三連。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74177.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python FastAPI + Celery + RabbitMQ 分布式圖片水印處理系統

FastAPI 服務器Celery 任務隊列RabbitMQ 作為消息代理定時任務處理 首先創建項目結構: c:\Users\Administrator\Desktop\meitu\ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── celery_app.py │ ├── tasks.py │ └── config.py…

【藍橋杯】每日練習 Day18

目錄 前言 動態求連續區間和 分析 代碼 數星星 分析 代碼 星空之夜 分析 代碼 前言 接下來是今天的題目(本來是有四道題的但是有一道題是前面講過(逆序數的,感興趣的小伙伴可以去看我歸并排序的那一篇)的我就不再過多贅…

基于銀河麒麟桌面服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】

一、3種方式使用DeepSeek 1.本地部署 服務器操作系統環境進行,具體流程如下(桌面環境步驟相同): 本例所使用銀河麒麟高級服務器操作系統版本信息: (1)安裝ollama 方式一:按照ollama官網的下載指南,執行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

Python入門(7):Python序列結構-字典

字典Dictionary 字典(dictionary)和列表類似&#xff0c;也是可變序列&#xff0c;不過與列表不同&#xff0c;它是無序的可變序列&#xff0c;保存的為容是以“鍵-值對”的形式存放的。 Python 中的字典相當于 Java 或者 C中的 Map 對象。在C#中,就是Dictionary<TKey,TVa…

Flutter項目之構建打包分析

目錄&#xff1a; 1、準備部分2、構建Android包2.1、配置修改部分2.2、編譯打包 3、構建ios包3.1、配置修改部分3.2、編譯打包 1、準備部分 2、構建Android包 2.1、配置修改部分 2.2、編譯打包 執行flutter build apk命令進行打包。 3、構建ios包 3.1、配置修改部分 3.2、編譯…

不用再付費~全網書源一鍵下載,實現閱讀自由!!!

現在市面上有許多免費你看書的軟件&#xff0c;但都軟件內太多廣告彈窗&#xff0c;這無疑是很煩&#xff0c;有事一不小心點進去就下載了軟件&#xff0c;簡直讓人頭大&#xff01; 如果你遇到這樣的難題那么就應該看下本文~ 這是一款能一鍵將在線連載小說整合下載成標準格式&…

GCC RISCV 后端 -- GIMPLE IR 表示的一些理解

C/C源代碼經過 GCC 解析&#xff08;Parse&#xff09;及轉換后&#xff0c;通過 GIMPLE IR 予以表示&#xff08;Representation&#xff09;。其中&#xff0c;一個C/C源文件&#xff0c;通過 宏處理后&#xff0c;形成一個 轉譯單元&#xff08;Translation Unit&#xff09…

JAVA設計模式之適配器模式《太白金星有點煩》

太白金星握著月光凝成的鼠標&#xff0c;第108次檢查南天門服務器的運行日志。這個剛從天樞院調來的三等仙官&#xff0c;此刻正盯著瑤池主機房里的青銅鼎發愁——鼎身上"天地同壽"的云紋間&#xff0c;漂浮著三界香火系統每分鐘吞吐的十萬條功德數據。看著居高不下的…

以太坊DApp開發腳手架:Scaffold-ETH 2 詳細介紹與搭建教程

一、什么是Scaffold-ETH 2 Scaffold-ETH 2是一個開源的最新工具包&#xff0c;類似于腳手架。用于在以太坊區塊鏈上構建去中心化應用程序 &#xff08;DApp&#xff09;。它旨在使開發人員更容易創建和部署智能合約&#xff0c;并構建與這些合約交互的用戶界面。 Scaffold-ETH…

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六)

畢業設計:實現一個基于Python、Flask和OpenCV的人臉打卡Web系統(六) Flask Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。 Flask也被稱為 “microframework” ,因為它使用簡單的核心,…

第十一章 VGA顯示圖片(還不會)

FPGA至簡設計實例 前言 一、項目背景 1. IP核概述 IP 核(Intellectual Property core)指的是知識產權核或知識產權模塊,其是具有特定電路功能的硬件描述語言程序,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將 半導體產業的IP定義為“用于ASIC或FPGA…

浙江大學公開課|第二季|從大模型、智能體到復雜AI應用系統的構建——以產業大腦為例

大家好&#xff0c;我是吾鳴。 前沿回顧 吾鳴之前給大家分享過浙江大學DeepSeek系列公開課第一季&#xff0c;第一季一共八講&#xff0c;內容介紹豐富&#xff0c;內容之廣&#xff0c;看完粉絲朋友直呼浙大良心。這八講公開課名稱分別是&#xff1a; 第一期&#xff08;上&…

Spring AOP中為所有類型通知傳遞參數的完整示例,包含詳細注釋和參數傳遞方式

以下是Spring AOP中為所有類型通知傳遞參數的完整示例&#xff0c;包含詳細注釋和參數傳遞方式&#xff1a; // 1. 目標類&#xff08;被增強的類&#xff09; package com.example;public class TargetService {public void doTask(String param) {System.out.println("…

【Git教程】將dev分支合并到master后,那么dev分支該如何處理

將 dev 合并到 master 后的分支狀態與操作指南 1. 合并后的分支狀態 dev 分支不會消失&#xff1a; Git 的 git merge 命令僅將 dev 的內容合并到 master&#xff0c;不會刪除 dev 分支。合并后&#xff0c;dev 分支仍然存在&#xff0c;其歷史記錄和代碼保持不變。 分支的 H…

【go】異常處理panic和recover

panic 和 recover 當然能觸發程序宕機退出的&#xff0c;也可以是我們自己&#xff0c;比如經過檢查判斷&#xff0c;當前環境無法達到我們程序進行的預期條件時&#xff08;比如一個服務指定監聽端口被其他程序占用&#xff09;&#xff0c;可以手動觸發 panic&#xff0c;讓…

CSS層疊順序

介紹 在 CSS 中&#xff0c;元素的層疊順序決定了當多個元素重疊時&#xff08;跟布局沒有完全的關系&#xff0c;也就是說層疊順序只會在幾個疊放元素上進行比較&#xff0c;而不會改變布局&#xff09;&#xff0c;哪個元素顯示在最上面&#xff0c;哪個元素顯示在最下面。 …

數制——FPGA

1、定點數 定點數的三種表示方式&#xff1a; 原碼&#xff1a;符號位 絕對值 表示方法 反碼&#xff1a;正數的反碼表示 與原碼表示一致&#xff0c;負數的反碼表示 除符號位&#xff0c;其他位全都取反 補碼&#xff1a;正數的補碼表示 與原碼表示一致&#xff0c;負數的補碼…

在用redis當中可能遇到的問題解決方案以及redis中的一些名詞解釋

在用redis當中可能遇到的問題解決方案以及redis中的一些名詞解釋 Redis篇一、緩存穿透&#xff1a;解決方案&#xff1a;緩存空數據布隆過濾器 二、緩存擊穿解決方案互斥鎖&#xff0c;強一致性&#xff0c;性能差&#xff0c;速度慢邏輯過期&#xff0c;數據不同步&#xff0c…

一文詳解QT環境搭建:Windows使用CLion配置QT開發環境

在當今的軟件開發領域&#xff0c;跨平臺應用的需求日益增長&#xff0c;Qt作為一款流行的C圖形用戶界面庫&#xff0c;因其強大的功能和易用性而備受開發者青睞。與此同時&#xff0c;CLion作為一款專為C/C打造的強大IDE&#xff0c;提供了豐富的特性和高效的編碼體驗。本文將…

【區塊鏈安全 | 第二十四篇】單位和全局可用變量(二)

文章目錄 單位和全局可用變量&#xff08;Units and Globally Available Variables&#xff09;特殊變量和函數1. 區塊和交易屬性2. ABI 編碼和解碼函數3. bytes 成員函數4. string 成員函數5. 錯誤處理6. 數學和加密函數7. 地址類型成員函數8. 與合約相關9. 類型信息 單位和全…