C++中string類的初步介紹

C語言中的字符串

在C語言中,字符串是以'\0'結尾的一些字符的集合,C標準庫中提供了一系列str系列的庫函數,但這些庫函數與字符串是分離的,不符合面向對象的編程思想。

string類的大致介紹

1.string是表示字符串的字符串類

2.string類的接口與常規容器的接口基本相同,又添加了一些專門用來操作string的常規操作

3.string在底層實際是basic_string模板類的別名

? ? typedef basic_string <char,char_traits,allocator> string

4.不能操作多字節或者變長字符的序列

string類對象的常見構造

1.string()

????????構造空的string類對象,即空的字符串

2.string(const char*s)

????????用c-string來構造string類對象

3.string(size_t n, char c)

? ? ? ? string類對象中包含n個字符c

4.string(const string&s)

? ? ? ? 拷貝構造函數

string類對象的容量操作

1.size

? ? ? ? 返回字符串有效字符長度

2.length

? ? ? ? 返回字符串有效字符長度

3.capacity

? ? ? ? 返回空間總大小

4.empty

? ? ? ? 檢測字符串是否為空串,若是返回true,若不是返回false

5.clear

? ? ? ? 清空有效字符

6.reserve

? ? ? ? 為字符串預留空間

7.resize

? ? ? ? 將有效字符的個數改成n個,多出的空間用字符c填充

注意:

->size()與length()方法底層實現原理完全相同,引入size()的原因是為了與其他容器的接口保持一致,一般情況下基本都是用size()

->clear()只是將string中有效字符清空,不改變底層空間大小

->resize(size_t n)與resize(size_t n, char c)都是將字符串中有效個數改變到n個,不同的是,當字符個數增多時,resize(n)用0來填充多出的元素空間,resize(n,c)用字符c來填充多出的元素空間。

(resize在改變元素個數時,如果是將元素個數增多,可能會改變底層容量的大小,如果是將元素個數減少,底層空間總大小不變)

->reserve(size_t res_arg=0),為string預留空間,不改變有效元素個數,當reserve的參數小于string的底層空間總大小時,reserve不會改變容量大小

string類對象的訪問及遍歷操作

1.operator[]

? ? ? ? 返回pos位置的字符,const string類對象調用

2.begin,end

? ? ? ? begin獲取第一個字符的迭代器,end獲取最后一個字符下一個位置的迭代器

3.rebegin,rend

? ? ? ? rebegin獲取最后一個字符的迭代器,rend獲取第一個字符前一個位置的迭代器

string類對象的修改操作

1.push_back

? ? ? ? 在字符串后尾插字符c

2.append

? ? ? ? 在字符串后追加一個字符串

3.operator+=

? ? ? ? 在字符串后追加字符串str

4.c_str

? ? ? ? 返回c格式字符串

5.find+npos

? ? ? ? 從字符串pos位置開始往后找字符c,返回該字符在字符串中的位置

6.rfind

? ? ? ? 從字符串pos位置開始往前找字符c,返回該字符在字符串中的位置

7.substr

? ? ? ? 在str中從pos位置開始,截取n個字符,然后將其返回

注意:

->在string尾部追加字符時,s.push_back(c)/s.append(1,c)/s+='c' 三種的實現方式差不多,一般情況下string類的+=操作用的比較多,+=操作不僅可以連接單個字符,還可以連接字符串

->對string操作時,如果能夠預估到大概放多少字符,可以先通過reserve把空間預留好

string類非成員函數

1.operator+

? ? ? ? 盡量少用,因為傳值傳值返回,導致深拷貝效率低

2.operator>>

? ? ? ? 輸入運算符重載

3.operator<<

? ? ? ? 輸出運算符重載

4.getline

? ? ? ? 獲取一行字符串

5.relational operators

? ? ? ? 大小比較

vs與g++下string結果的說明

1.vs下string的結構

string總共占28個字節,內部結構稍微復雜一點,先是有一個聯合體,聯合體中用來定義字符串中的儲存空間

->當字符串長度小于16時,使用內部固定的字符數組來存放

->當字符串長度大于等于16時,從堆上開辟空間

有一個size_t 字段保存字符串長度,有一個size_t 字段保存從堆上開辟空間總的容量

還有一個指針做一些其他的事情

2.g++下string的結構

g++下,string是通過寫時拷貝實現的,string對象總共占4個字節,內部只包含了一個指針,該指針將來指向一塊空間,內部包含了如下字段

->空間總大小

->字符串有效長度

->引用計數

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

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

相關文章

GpuMall智算云:meta-llama/llama3/Llama3-8B-Instruct-WebUI

LLaMA 模型的第三代&#xff0c;是 LLaMA 2 的一個更大和更強的版本。LLaMA 3 擁有 35 億個參數&#xff0c;訓練在更大的文本數據集上GpuMall智算云 | 省錢、好用、彈性。租GPU就上GpuMall,面向AI開發者的GPU云平臺 Llama 3 的推出標志著 Meta 基于 Llama 2 架構推出了四個新…

pycharm畫圖貓和老鼠

在PyCharm中&#xff0c;你可以使用turtle模塊來畫圖。以下是一個簡單的例子&#xff0c;展示如何使用turtle模塊來繪制一個貓和一個老鼠。 import turtle # 設置窗口標題 turtle.title("畫圖貓和老鼠") # 創建兩個turtle對象&#xff0c;一個用于繪制貓&#xf…

AWS聯網和內容分發之API Gateway

Amazon API Gateway是一種完全托管的服務&#xff0c;可以幫助開發人員輕松創建、發布、維護、監控和保護任意規模的API。API充當應用程序的前門&#xff0c;可從您的后端服務訪問數據、業務邏輯或功能。使用API Gateway&#xff0c;您可以創建RESTful API和WebSocket API&…

lightGBM 集成學習模型 - 以銀行風控業務為例

LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是基于梯度提升決策樹&#xff08;GBDT&#xff09;的一種改進實現。其核心思想是通過加法模型&#xff08;additive model&#xff09;和前向分布算法&#xff08;forward distribution algorithm&#xff09…

Qt pro工程文件編寫匯總(區分debug和release、32位和64位的方法,編譯輸出目錄等)

前言&#xff1a; 從事qt開發已經好幾年了&#xff0c;但有關pro編寫的一些細節問題一直沒有一個很好的梳理匯總——因為實際工作開發中&#xff0c;往往只需要編譯特定版本的軟件&#xff08;例如32位release版本&#xff09;&#xff0c;項目創建好后并設置好編譯路徑&#x…

ML307R OpenCPU GPIO使用

一、GPIO使用流程圖 二、函數介紹 三、GPIO 點亮LED 四、代碼下載地址 一、GPIO使用流程圖 這個圖是官網找到的&#xff0c;ML307R GPIO引腳電平默認為1.8V&#xff0c;需注意和外部電路的電平匹配&#xff0c;具體可參考《ML307R_硬件設計手冊_OpenCPU版本適用.pdf》中的描…

零基礎PHP入門(一)選擇IDE和配置環境

配置環境 官網下載安裝包&#xff0c;windows https://windows.php.net/download#php-8.3 我是下載的最新版&#xff0c;也可以切換其他版本 https://windows.php.net/downloads/releases/archives/ 下載好壓縮文件后&#xff0c;雙擊解壓到一個目錄 D:\soft\php 復制ph…

成都愛爾眼科醫院《中、歐國際近視手術大數據白皮書2.0》解讀會圓滿舉行

2024年5月12日&#xff0c;愛爾眼科聯合中國健康促進基金會健康傳播與促進專項基金、新華社新媒體中心與中南大學愛爾眼科研究院、愛爾數字眼科研究所重磅發布《中、歐國際近視手術大數據白皮書2.0》。這是繼2021、2022年在國內相繼發布《國人近視手術白皮書》、《2022中、歐近…

Ubuntu系統初始化相關配置

目錄 Ubuntu文件傳輸: ubuntu怎么打開word:安裝wps(應用中心搜索) Ubuntu安裝annoconda

模型蒸餾筆記

文章目錄 一、什么是模型蒸餾二、如何蒸餾三、實踐四、參考文獻 一、什么是模型蒸餾 Hinton在NIPS2014提出了知識蒸餾&#xff08;Knowledge Distillation&#xff09;的概念&#xff0c;旨在把一個大模型或者多個模型ensemble學到的知識遷移到另一個輕量級單模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重復提交(單機環境和分布式環境)

&#x1f4dd;個人主頁&#xff1a;哈__ 期待您的關注 目錄 &#x1f33c;前言 &#x1f512;單機環境下防止接口重復提交 &#x1f4d5;導入依賴 &#x1f4c2;項目結構 &#x1f680;創建自定義注解 ?創建AOP切面 &#x1f697;創建Conotroller &#x1f4bb;分布…

構建高效的在線培訓機構CRM應用架構實踐

在當今數字化時代&#xff0c;在線培訓已成為教育行業的重要趨勢之一。為了提供更好的學習體驗和管理服務&#xff0c;在線培訓機構需要構建高效的CRM&#xff08;Customer Relationship Management&#xff09;應用架構。本文將探討在線培訓機構CRM應用架構的設計與實踐。 一、…

PTA 6-3 入侵者圍剿第二關3情報解密

經過上一步已經將2個分隊得到的秘密情報合并到一起&#xff0c;并進行了信息去重。接下來&#xff0c;經過情報的分析&#xff0c;發現情報進行加密的方式&#xff0c;將鏈表從正中間斷開&#xff0c;然后后面的鏈表全部接到前面&#xff0c;輸出來的次序就是敵方的武器發射次序…

綠色智能:AI機器學習在環境保護中的深度應用與實踐案例

&#x1f9d1; 博主簡介&#xff1a;阿里巴巴嵌入式技術專家&#xff0c;深耕嵌入式人工智能領域&#xff0c;具備多年的嵌入式硬件產品研發管理經驗。 &#x1f4d2; 博客介紹&#xff1a;分享嵌入式開發領域的相關知識、經驗、思考和感悟&#xff0c;歡迎關注。提供嵌入式方向…

在vps的centos系統中用Python和青龍檢測網頁更新

環境&#xff1a;vps&#xff0c;centos7&#xff0c;python3.8.10&#xff0c;青龍面板&#xff08;用寶塔安裝&#xff09; 任務&#xff1a;用python代碼&#xff0c;監控一個網站頁面是否有更新&#xff08;新帖子&#xff09;&#xff0c;若有&#xff0c;則提醒&#xf…

【數據結構】二叉樹的認識與實現

目錄 二叉樹的概念&#xff1a; 二叉樹的應用與實現&#xff1a; 二叉樹實現接口&#xff1a; 通過前序遍歷的數組"ABD##E#H##CF##G##"構建二叉樹 二叉樹節點個數?編輯 二叉樹葉子節點個數 二叉樹第k層節點個數 二叉樹查找值為x的節點?編輯 二叉樹前序遍…

XSS+CSRF攻擊

一、前言 在DVWA靶場的XSS攻擊下結合CSRF攻擊完成修改密碼 也就是在具有XSS漏洞的情況下實施CSRF攻擊 二、實驗 環境配置與上一篇博客一致&#xff0c;有興趣可以參考CSRF跨站請求偽造實戰-CSDN博客 首先登錄DVWA&#xff0c;打開XSS模塊 name隨便輸入&#xff0c;message…

嵌入式0基礎開始學習 Ⅲ Linux基礎(1)Linux基本命令

1.APT unbuntu中功能最強大的命令行軟件包管理工具&#xff0c; 用來獲取&#xff0c;安裝&#xff0c;編譯&#xff0c;卸載&#xff0c;查詢軟件包。 工作原理; /etc/apt/sources.list -> 文件 用來指針ubuntu的軟件源服務器…

HQL面試題練習 —— 合并數據

題目來源&#xff1a;京東 目錄 1 題目2 建表語句3 題解 1 題目 已知有數據 A 如下&#xff0c;請分別根據 A 生成 B 和 C。 數據A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申請權限

前面介紹了 Android 運行時權限。 其中&#xff0c;申請權限的步驟有些繁瑣&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函數和 onRequestPermissionsResult 回調函數&#xff0c;今天就借助 ActivityResultLauncher 來簡化書寫。 步驟1&#xff1a;創…