【STL】string類(中)

目錄

1,rbegin 和 rend

2,reserve &?capacity

3,max_size ( )

4,size()& resize

1,void resize (size_t,char c)

5,push_back &?append

1,追加字符串范圍

2,直接追加


1,rbegin 和 rend

具體詳情:cplusplus.com/reference/string/string/rbegin/

#include<iostream>
#include<string>
using namespace std;int main()
{string s1("hello world");string::reverse_iterator it = s1.rbegin();while (it != s1.rend()){cout << *it << " ";it++;}return 0;
}

其實也就是逆置打印字符串;

而且缺點也很明顯,類型太長了不便于書寫;

所以 auto 的好用之處就體現出來了,自動幫我們推算類型;

int main()
{string s1("hello world");//string::reverse_iterator it = s1.rbegin();auto it = s1.rbegin();while (it != s1.rend()){cout << *it << " ";it++;}return 0;
}

這樣就更 OK 了;

還有一個冷門不常用的,就是 crengin 代替 rengin ,crend 代替 crend ;

int main()
{string s1("hello world");//string::reverse_iterator it = s1.crbegin();auto it = s1.crbegin();while (it != s1.crend()){cout << *it << " ";it++;}return 0;
}

2,reserve &?capacity

reserve:更改容量,需要多少空間,提前開好即可

capacity:返回空間總大小

int main()
{string s1;string s2("hello world");//初始容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;cout << endl;s1.reserve(20);s2.reserve(30);//當 n>容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;cout << endl;s1.reserve(5);s2.reserve(5);//當 n<容量大小cout << s1.capacity() << endl;cout << s2.capacity() << endl;return 0;
}

小伙伴們會好奇,為什么擴容的容量不跟我們指定的容量相同;

那是因為編譯器有自己的一套擴容機制;

int main()
{string s1;string s2("hello world");int doll = s1.capacity();cout << s1.capacity() << endl;int i = 1000;while (i--){s1 += ' ';if (doll != s1.capacity()){cout << s1.capacity() << endl;doll = s1.capacity();}}return 0;
}

基本上是按 1.5 倍擴增的,除了剛開始的;

所以空間容量只會在這些值里面,就算是 16?也直接擴容至下一階段 31,其實是 32,因為還有一個 ' \0 ' ;

當擴容之后的量大于當前的容量則擴大;

當擴容之后的量小于當前真實容量則不變,否則縮小;

string s2("hello world") 里面的 " hello world " 真實容量就是11;

3,max_size ( )

算出字符串所能開辟的最大空間

int main()
{string s1;string s2("hello world");cout << s1.max_size() << endl;cout << s2.max_size() << endl;return 0;
}

由上可得 string類所能開辟的最大空間都是一樣的;

但是所能開辟的最大空間并不是真的能開辟,我們來看一段代碼;

int main()
{string s1;string s2("hello world");cout << s2.capacity() << endl;cout << s2.max_size() << endl;s2.reserve(s2.max_size());cout << s2.capacity() << endl;return 0;
}

上面開最大空間的容量的時候,運行直接崩潰的,根本開不出來;?

真實的話是開不出來的,這僅供參考,不必當真;

4,size()& resize

size():返回字符串有效長度

resize():將有效字符的個數該成n個,多出的空間用字符 c 填充

我們直接來看一段代碼

int main()
{string s1;string s2("hello world");//打印有效字符長度和容量大小cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.resize(20);s2.resize(30);//有效字符對容量的影響cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.resize(5);s2.resize(8);//cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;cout << endl;s1.reserve(100);s2.reserve(200);//容量對有效字符的影響cout << s1.size() << " " << s1.capacity() << endl;cout << s2.size() << " " << s2.capacity() << endl;return 0;
}

由上可得,有效字符 size 的長度會影響 capacity 容量,但是 capacity 容量的大小不會影響 有效字符 size ;

而且 字符串有效字符長度會隨著 size 的變化而變化即使是縮小,但是容量不會改變,以后可以用于【刪除數據,保留前 n 個】

1,void resize (size_t,char c)

擴增加尾插

int main()
{string s1;string s2("hello world");s1.resize(10, 'y');s2.resize(20,'x');cout << s2 << endl;cout<< s1 << endl;return 0;
}

這個我們以后可以用作給字符串賦值和初始化;

5,push_back &?append

push_back :在字符串后尾插字符c

append:在字符串后追加一個字符串

直接上代碼:

int main()
{string s1;string s2("hello world");s1.push_back('x');s2.push_back('y');cout << s1 << endl;cout << s2 << endl;cout << endl;s2.append("hello world");s2.append("hello wprld");cout << s1 << endl;cout << s2 << endl;return 0;
}

1,追加字符串范圍

string& append(inputiterator first,inputiterator last);

int main()
{string s1("abcdefg");string s2("hello world");s1.append(s2.begin(), s2.end());cout << s1 << endl;cout << endl;string s3("abcdefg");s2.append(++s3.begin(), --s3.end());cout << s2 << endl;return 0;
}

直接范圍也是可以的,還可以 ++,--;

int main()
{string s1;string s2("hello world");s1.append(s2,2,7);s2.append(10, 'x');cout << s1 << endl;cout << s2 << endl;return 0;
}

?指定也是可以的,用法有很多更 string類的用法類似,大家可以去查查文檔的各種用法;

2,直接追加

int main()
{string s1;string s2("hello world");s1 += 'x';s2 += " abcdefg";cout << s1 << endl;cout << s2 << endl;return 0;
}

直接 追加也可以,更簡便;

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

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

相關文章

城市生命線丨橋梁健康結構監測系統作用如何

截至2022年底&#xff0c;我國擁有公路橋梁103.3萬座&#xff0c;總長約8576萬延米&#xff0c;其中特大橋8816座&#xff0c;總長約1621萬延米。 為了確保這些橋梁的安全&#xff0c;需要進行定期的檢測和維護&#xff0c;及時發現和解決橋梁存在的問題。 同時&#xff0c;政…

Servlet---HttpServlet、HttpServletRequest、HttpServletResponseAPI詳解

文章目錄 HttpServlet基礎方法doXXX方法Servlet的生命周期 HttpServletRequest獲取請求中的信息獲取請求傳遞的參數獲取 query string 里的數據獲取form表單里的數據獲取JSON里的數據如何解析JSON格式獲取數據返回數據 HttpServletResponse設置響應的Header設置不同的狀態碼設置…

ASM之ClassWriter生成.class

ASM之ClassWriter生成.class 我們可以使用ClassWriter來生成一個類 如果不知道如何編寫ASMified代碼&#xff0c;可以直接使用插件ASMPlugin&#xff0c;將你需要的功能編寫成正常的java代碼&#xff0c;然后使用ASM Bytecode Viewer將編寫的類轉換成ASMified代碼后作為參考 …

瀏覽器事件循環原理 —— 任務優先級

系列文章目錄 第一章 瀏覽器事件循環原理 —— 瀏覽器進程模型第二章 瀏覽器事件循環原理 —— 渲染主線程如何工作&#xff1f;第三章 瀏覽器事件循環原理 —— 何為異步&#xff1f;第四章 瀏覽器事件循環原理 —— JS為何會阻礙渲染&#xff1f; 文章目錄 系列文章目錄 文…

C/C++雜談-printf的可變參數機制

C/C雜談-printf的可變參數機制 文章目錄 C/C雜談-printf的可變參數機制printf的使用printf的源碼源碼剖析 多參數實現機制原理 C11引入了可變參數模板機制&#xff0c;對模板參數進行了高度泛化&#xff0c;但是對于可變參數其實C語言學習中早已遇到過&#xff0c;那就是printf…

【Redis】持久化-RDBAOF混合持久化

文章目錄 前置知識RDB&#xff08;定期備份&#xff09;觸發機制流程說明RDB文件的處理RDB 的優缺點 AOF&#xff08;實時備份&#xff09;使用AOF命令寫入AOF工作流程文件同步重寫機制重寫觸發機制AOF進制重寫流程 混合持久化啟動時數據恢復 總結 前置知識 回顧MySQL MySQL的事…

LeetCode(28)盛最多水的容器【雙指針】【中等】

目錄 1.題目2.答案3.提交結果截圖 鏈接&#xff1a; 盛最多水的容器 1.題目 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多的水…

云計算時代改變了什么?

當今云計算時代&#xff0c;計算資源和數據存儲已經不再受限于本地設備的硬件和軟件限制。云計算技術的發展和普及&#xff0c;使得用戶可以通過互聯網訪問大量的計算資源和存儲空間&#xff0c;從而改變了我們對計算和數據的看法。本文將探討云計算時代對計算和數據處理的影響…

對線程的創建

一&#xff0c;概括 二&#xff0c;線程構建方式一&#xff08;繼承Thread類&#xff09; 三&#xff0c;案例 父類&#xff1a; package Duoxiancheng;public abstract class Name {public static void main(String[] args) {//3&#xff0c;創建一個Thread線程類對象Thr…

匯編語言學習筆記

匯編語言的不同種類 as86匯編&#xff1a;能產生16位代碼的Intel 8086匯編 mov ax, cs //cs→ax&#xff0c;目標操作數在前GNU as匯編&#xff1a;產生32位代碼&#xff0c;使用AT&T系統V語法 movl var&#xff0c; %eax // var→%eax&#xff0c;目標操作數在后內嵌匯編…

Android異步之旅:探索AsyncTask

前言&#xff1a; 在Android應用程序開發中&#xff0c;異步操作是非常常見的需求。比如&#xff0c;我們可能需要在后臺線程中執行網絡請求、數據庫操作或者其他耗時的任務&#xff0c;而不阻塞UI線程。為了實現這些異步操作&#xff0c;Android提供了多種方式&#xff0c;其…

基于Qt的UDP通信、TCP文件傳輸程序的設計與實現——QQ聊天群聊

&#x1f64c;秋名山碼民的主頁 &#x1f602;oi退役選手&#xff0c;Java、大數據、單片機、IoT均有所涉獵&#xff0c;熱愛技術&#xff0c;技術無罪 &#x1f389;歡迎關注&#x1f50e;點贊&#x1f44d;收藏??留言&#x1f4dd; 獲取源碼&#xff0c;添加WX 目錄 前言一…

PostgreSQL序列,怎么才能第二天重新從1開始計數

--確定日期最大值和每天序列號最大值 with cte as(select (((1::bigint)<<32)-1) as max_date_second,(((1::bigint)<<31)-1) as max_sn )select max_date_second,to_timestamp(max_date_second),max_sn,((max_date_second<<31)|max_sn) as max_val,(((max_d…

Selenium 元素不能定位總結

目錄 元素不能定位總結: 1、定位語法錯誤&#xff1a; 定位語法錯誤&#xff0c;如無效的xpath&#xff0c;css selector,dom路徑錯誤&#xff0c;動態dom 定位語法錯誤&#xff0c;動態路徑&#xff08;動態變化&#xff09; 定位策略錯誤&#xff0c;如dom沒有id用id定位…

研發探索:導購APP、查券返利機器人與淘客系統,全面對比與選擇

研發探究&#xff1a;導購APP、查券返利機器人與淘客系統&#xff0c;全面對比與選擇 在互聯網購物的時代&#xff0c;導購APP、淘客機器人和微賺淘客系統成為了消費者們的三大好幫手。它們各具優勢&#xff0c;但也存在一些不足。本文將為您詳細對比這三種工具&#xff0c;幫…

vue history路徑編碼

記錄今天遇到的一個問題&#xff1a; 問題現狀 有一個需要前端偽造302進行重定向的需求&#xff0c;我們需要將這樣的一個路徑&#xff1a;http://xxx.com/system-name/#/index&#xff0c;拼接在跳轉地址的后面&#xff0c;進行重定向。拼接的方式是這樣的&#xff1a; htt…

攻防世界-web-Confusion1

1. 題目描述 打開鏈接&#xff0c;如圖 點擊Login和Rigister&#xff0c;都報錯 但是有提示 指出了flag所在的位置&#xff0c;題目中直接能獲取到的信息暫時就這么些了 2. 思路分析 既然告訴了我們flag文件的位置&#xff0c;那么要讀取到這個文件&#xff0c;要么是任意文…

AI輔助帶貨直播場景源碼系統 附帶網站的搭建教程

互聯網技術的發展和普及&#xff0c;直播帶貨行業迅速崛起。然而&#xff0c;直播帶貨在帶來商機的同時&#xff0c;也面臨著諸多挑戰。如直播內容缺乏新意、轉化率低等問題。針對這些問題&#xff0c;AI輔助帶貨直播場景源碼系統應運而生&#xff0c;旨在利用人工智能技術&…

【高級滲透篇】網絡安全面試

【高級滲透篇】網絡安全面試 1.權限維持2.代碼安全Python語法相關 1.權限維持 Linux權限維持方法論 Windows權限維持方法論 2.代碼安全 Python 語法相關 1、Python的值類型和引用類型是哪些 Python 中的值類型包括&#xff1a; 數字類型&#xff08;如整數、浮點數、復數…

對接蘋果支付退款退單接口

前言 一般而言&#xff0c;我們其實很少對接退款接口&#xff0c;因為退款基本都是商家自己決定后進行操作的&#xff0c;但是蘋果比較特殊&#xff0c;用戶可以直接向蘋果發起退款請求&#xff0c;蘋果覺得合理會退給用戶&#xff0c;但是目前公司業務還是需要對接這個接口&am…