string 的接口

????????我們繼續來講解一些常用的string接口。

? ? ? ? 一.at接口

????????

? ? ? ? 我們來看一個越界的問題。

? ? ? ? 我們運行之后發現這是一個斷言錯誤,直接就終止我們的程序了,不能作為異常被捕捉到,但是我們如果不想讓程序直接崩潰該怎么辦呢?

? ? ? ? 此時我們就要用到at關鍵字了。

????????at?函數的重要特性是會進行邊界檢查。若傳入的索引超出字符串的有效范圍(即?pos >= str.size()),它會拋出?std::out_of_range?異常。

????????

? ? ? ?

? ? ? ? 此時程序不會直接崩潰而是拋出一個異常。

????????

二?push_back

? ? ? ? 這個就是添加元素的。

????????

? ? ? ? 此時s1就是x了。

? ? ? ? 這個沒什么講的,一次只能插入一個字符。

????????

三.append

? ? ? ? 這個就是添加字符串的,可以一次添加多個元素。

????????

? ? ? ? 就是把這個字符串給添加上去了。

????????

? ? ? ? 我們可以看到有六個用法,大家感興趣的都可以試試,我只講一些常用的吧。

????????

? ? ? ? 我們來看一下這個代碼,capacity和size的大小都是不帶/0的。

? ? ? ? 下面兩個就是常用的,可以通過迭代器的形式來給它值,最后一個append表示我們從s2的第六個開始,把后面都加上去,也就是wrold。

????????????????????????

? ? ??

? ? ? ? 這樣也是可以的,這是因為實現了運算符的重載。

????????

????????


四.思考? ? ?

? 下面我們來思考一下,size>capacity的時候,系統是怎么擴容呢?

? ? ? ? 我們來研究一下。

????????

? ? ? ? 我們運行一下看一下。

????????

? ? ? ? 我們發現是1.5倍左右(每個編譯器都是不同的),但是第一次擴容為什么會是兩倍呢?

????????因為我們可以認為是編譯器優化吧,vs如果你小于16的話,它是會有一個Buff數組來存放這些數據的,這樣會減少內存碎片,你要是超過這個大小才會擴容,第一次就是buff的二倍,以后才是原來的1.5倍數來擴容的。

? ? ? ? 我們用g++來演示一下。

????????

? ? ? ? 我們看到g++的擴容原則是兩倍兩倍的擴容。

????????

????????


五.reserve

? ? ? 這個接口的主要作用就是用來擴容的。

??????????

? ? ? ? 我們來看一下這個圖,當我們的預留空間小于size的時候。

? ? ? ? 要遵守這個原則,不能影響原來的內容,所以小于size的時候,一定不會縮容的,大于capacity一定是要擴容的,但是大于size小于capacity的時候就不一定縮容了,可能縮容也可能不縮容。

????????

????????

? ? ? ? 我們發現并沒有縮容的情況,我們再在g++上試一下。

????????

? ? ? ? 我們發現在g++上出現了縮容現象。

????????



六.resize

????????

? ? ? ? 這個的主要作用就是改變size 的大小的。

? ? ? ??

? ? ? ? 如果給的這個數小于size的大小就會刪除多余的數據,大于size小于capacity的話就會插入數據,不給第二個參數,如圖第二行就會用/0來補充,大于capacity的話就會擴容和插入數據。

????????

????????



七.insert

????????

? ? ? ? 我們來看一下,第一個insert,就是在0位置插入hello,我們要是只想插入一個char類型的單個字符怎么辦呢?

? ? ? ? 就是第二個insert,就是在0位置插入1個a,盡量還是不要用insert,因為它的時間復雜度是o(n),會使效率很低。

????????

????????



八.erase

???????????????? ? ? ? 我們主要用第一個和第三個,第一個就是第二個erase,那個npos你可以理解為無窮大,不給值就會用缺省值,表示刪除第五個以后的元素,?第一個erase表示刪除第五個后面的兩個元素也就是第六個和第七個。

????????



九.結束語

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

? ? ??

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

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

相關文章

DeepSeek調用API訪問,使用AnythingLLM建立本地知識庫后開放API調用,ApiFox/PostMan調用本地DeepSeek

上篇文章中我們使用AnythingLLM成功在本地部署了DeepSeek的本地知識庫,并且上傳了幾個文件讓DeepSeek學習,可點擊查看: 本地部署DeepSeek并使用AnythingLLM建立本地知識庫全流程,DeepSeek-R1:7b本地安裝部署,DeepSeek-R1本地部署…

創新NDT解決方案:XARION激光超聲系統助力航空航天材料的高效監測

XARION激光超聲檢測系統是一種高效的無損檢測工具,它利用激光技術產生超聲波信號,并通過無膜光學麥克風捕捉這些信號,提供非接觸式的超聲檢測解決方案。該系統適用于多種材料和復雜表面的檢測,滿足工業、醫療和科研領域的嚴格標準…

基于 PHP 內置類及函數的免殺 WebShell

前言 PHP 作為廣泛使用的服務端語言,其靈活的內置類(如 DOMDocument)和文件操作機制(.ini、.inc 的自動加載),為攻擊者提供了天然的隱蔽通道。通過 動態函數拼接、反射調用、加密混淆 和 偽命名空間 等手法…

Arduino、ESP32驅動BME688環境傳感器(環境傳感器篇)

目錄 1、傳感器特性 2、硬件原理圖 3、控制器和傳感器連線圖 4、驅動程序 4.1、讀取數據(無IAQ指數) 4.2、讀取數據(帶IAQ數值) BME688環境傳感器是一款四合一MEMS環境傳感器,可測量VOC(揮發性有機物)、溫度、濕度、氣壓這四個參數,非常適用于監測空氣質量。由于…

數據結構——順序棧seq_stack

前言:大家好😍,本文主要介紹了數據結構——順序棧 目錄 一、概念 1.1 順序棧的基本概念 1.2 順序棧的存儲結構 二、基本操作 2.1 結構體定義 2.2 初始化 2.3 判空 2.4 判滿 2.5 擴容 2.6 插入 入棧 2.7 刪除 出棧 2.8 獲取棧頂元…

C++20 中的std::c8rtomb和 std::mbrtoc8

文章目錄 1. 引言2. std::c8rtomb 函數詳解3. std::mbrtoc8 函數詳解4. 使用示例5. 注意事項6. 總結 1. 引言 C20 標準引入了對 UTF-8 編碼的更好支持,其中包括兩個重要的函數:std::c8rtomb 和 std::mbrtoc8。這兩個函數分別用于將 UTF-8 編碼的字符轉換…

AI音樂生成革命:解讀昆侖萬維Mureka O1的技術突破與應用實踐

AI音樂生成革命:解讀昆侖萬維Mureka O1的技術突破與應用實踐 全球音樂產業正經歷AI技術重塑,昆侖萬維最新發布的音樂推理大模型Mureka O1引發行業震動。本文深度解析其技術原理與實測表現,揭開AI音樂創作新紀元的技術密碼 一、技術演進&…

《Operating System Concepts》閱讀筆記:p483-p488

《Operating System Concepts》學習第 40 天,p483-p488 總結,總計 6 頁。 一、技術總結 1.object storage (1)object storage 管理軟件 Hadoop file system(HDFS)、Ceph。 二、英語總結(生詞:1) 1.commodity (1)commodity: com-(“tog…

強化學習與神經網絡結合(以 DQN 展開)

目錄 基于 PyTorch 實現簡單 DQN double DQN dueling DQN Noisy DQN:通過噪聲層實現探索,替代 ε- 貪心策略 Rainbow_DQN如何計算連續型的Actions 強化學習中,智能體(Agent)通過與環境交互學習最優策略。當狀態空間或動…

“11.9元“引發的系統雪崩:Spring Boot中BigDecimal反序列化異常全鏈路狙擊戰 ?

💥 "11.9元"引發的系統雪崩:Spring Boot中BigDecimal反序列化異常全鏈路狙擊戰 🎯 🔍 用 Mermaid原生防御體系圖 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…

Cortex-M7進入異常中斷分析

使用cmbacktrace庫,其支持M3,4,7。 1、串口輸出異常信息 #define cmb_println(...) Debug_Printf(__VA_ARGS__)//cmb_println處理可變參數和格式化字符串 int Debug_Printf(const char *fmt, ...) {char buffer[DEBUG_TxBUFLEN];INT16U n;va_list args;va_star…

如何管理間接需求?團隊實踐分享

管理間接需求的核心方法包括明確需求識別流程、建立規范的需求管理體系、實施有效的需求溝通機制。 其中,明確需求識別流程最為關鍵。企業在實際業務中,往往會遇到大量的間接需求,如非直接生產性的采購需求、服務類需求等。這些需求往往隱蔽性…

與Aspose.pdf類似的jar庫分享

如果你在尋找類似于 Aspose.PDF 的 JAR 庫,這些庫通常用于處理 PDF 文檔的創建、編輯、轉換、合并等功能。以下是一些類似的 Java 庫,它們提供 PDF 處理的功能,其中一些是收費的,但也有開源選項: 1. iText (iText PDF…

2-2 MATLAB鮣魚優化算法ROA優化CNN超參數回歸預測

本博客來源于CSDN機器魚,未同意任何人轉載。 更多內容,歡迎點擊本專欄目錄,查看更多內容。 目錄 0.引言 1.ROA優化CNN 2.主程序調用 3.結語 0.引言 在博客【ROA優化LSTM超參數回歸】中,我們采用ROA對LSTM的學習率、迭代次數…

企業入駐成都國際數字影像產業園,可享150多項專業服務

企業入駐成都國際數字影像產業園,可享150多項專業服務 全方位賦能,助力影像企業騰飛 入駐成都國際數字影像產業園,企業將獲得一個涵蓋超過150項專業服務的全周期、一站式支持體系,旨在精準解決企業發展各階段的核心需求&#xf…

線路板元器件介紹及選型指南:提高電路設計效率

電路板(PCB)是現代電子設備的核心,其上安裝了各類電子元器件,這些元器件通過PCB的導電線路彼此連接,實現信號傳輸與功能執行。 元器件的選擇與安裝直接決定了電子產品的性能與穩定性。本文將為大家詳細介紹電路板上的…

探究 Arm Compiler for Embedded 6 的 Clang 版本

原創標題:Arm Compiler for Embedded 6 的 Clang 版本 原創作者:莊曉立(LIIGO) 原創日期:20250218(首發日期20250326) 原創連接:https://blog.csdn.net/liigo/article/details/14653…

RedHat7.6_x86_x64服務器(最小化安裝)搭建使用記錄(二)

PostgreSQL數據庫部署管理 1.rpm方式安裝 掛載系統安裝鏡像: [rootlocalhost ~]# mount /dev/cdrom /mnt 進入安裝包路徑: [rootlocalhost ~]# cd /mnt/Packages 依次安裝如下程序包: [rootlocalhost Packages]# rpm -ihv postgresql-libs-9…

瀏覽器存儲 IndexedDB

IndexedDB 1. 什么是 IndexedDB? IndexedDB 是一種 基于瀏覽器的 NoSQL 數據庫,用于存儲大量的結構化數據,包括文件和二進制數據。它比 localStorage 和 sessionStorage 更強大,支持索引查詢、事務等特性。 IndexedDB 主要特點…

panda3d 渲染

目錄 安裝 設置渲染寬高: 渲染3d 安裝 pip install Panda3D 設置渲染寬高: import panda3d.core as pdmargin 100 screen Tk().winfo_screenwidth() - margin, Tk().winfo_screenheight() - margin width, height (screen[0], int(screen[0] / 1…