成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C++ string的深入理解

darkbaby123 / 2051人閱讀

摘要:迭代器返回一個(gè)迭代器,該迭代器指向字符串結(jié)束字符的過(guò)去部分。不得取消對(duì)其的引用。如果字符串對(duì)象是限定的,則函數(shù)返回一個(gè)迭代器。此值在字符串的成員函數(shù)中用作或參數(shù)的值時(shí),表示直到字符串結(jié)束。

String類介紹
string的文檔介紹

  1. 字符串是表示字符序列的類
  2. 標(biāo)準(zhǔn)的字符串類提供了對(duì)此類對(duì)象的支持,其接口類似于標(biāo)準(zhǔn)字符容器的接口,但添加了專門用于操作
    單字節(jié)字符字符串的設(shè)計(jì)特性。
  3. string類是使用char(即作為它的字符類型,使用它的默認(rèn)char_traits和分配器類型(關(guān)于模板的更多信
    息,請(qǐng)參閱basic_string)。
  4. string類是basic_string模板類的一個(gè)實(shí)例,它使用char來(lái)實(shí)例化basic_string模板類,并用char_traits
    和allocator作為basic_string的默認(rèn)參數(shù)(根于更多的模板信息請(qǐng)參考basic_string)。
  5. 注意,這個(gè)類獨(dú)立于所使用的編碼來(lái)處理字節(jié):如果用來(lái)處理多字節(jié)或變長(zhǎng)字符(如UTF-8)的序列,這個(gè)
    類的所有成員(如長(zhǎng)度或大小)以及它的迭代器,將仍然按照字節(jié)(而不是實(shí)際編碼的字符)來(lái)操作。
    總結(jié):
    1. string是表示字符串的字符串類
    2. 該類的接口與常規(guī)容器的接口基本相同,再添加了一些專門用來(lái)操作string的常規(guī)操作。
      比特科技
    3. string在底層實(shí)際是:basic_string模板類的別名,typedef basic_stringstring;
    4. 不能操作多字節(jié)或者變長(zhǎng)字符的序列。在使用string類時(shí),必須包含#include頭文件以及using namespace std;

一、String的構(gòu)造方法
string構(gòu)造方法文檔介紹

這是文檔對(duì)string對(duì)的構(gòu)造方法地描述,以下是對(duì)string構(gòu)造函數(shù)地具體說(shuō)明。

string() 構(gòu)造空的string類對(duì)象,即空字符串
string(const char* s) 用C-string來(lái)構(gòu)造string類對(duì)象
string(size_t n, char c) string類對(duì)象中包含n個(gè)字符c
string(const string&s) 拷貝構(gòu)造函數(shù)

void text() {	string str;	string s("123456789");	string ss(8, "a");	string st(s);	cout << str << endl;	cout << s << endl;	cout << ss << endl;	cout << st << endl;}


箭頭標(biāo)出來(lái)的是空字符串,s通過(guò)拷貝構(gòu)造把值傳給了str,只不過(guò)值空字符串。

二、string容量操作介紹

size 返回字符串有效字符長(zhǎng)度
length 返回字符串有效字符長(zhǎng)度
capacity 返回空間總大小
empty 檢測(cè)字符串釋放為空串,是返回true,否則返回false
clear 清空有效字符
reserve 為字符串預(yù)留空間**
resize 將有效字符的個(gè)數(shù)該成n個(gè),多出的空間用字符c填充

  1. size()和length():返回string對(duì)象的字符個(gè)數(shù),他們執(zhí)行效果相同。
  2. capacity():重新分配內(nèi)存之前,string對(duì)象能包含的最大字符數(shù)

capacity表示為字符串預(yù)留空間的大小這是表示s1的預(yù)留空間大小為15而有效字符串長(zhǎng)度為9.

empty檢測(cè)字符串釋放為空串當(dāng)s1不是空串是輸出的是0,當(dāng)執(zhí)行了clear()情況了字符串時(shí)empty檢測(cè)s1為空串輸出為1。

resize 將s1有效字符的個(gè)數(shù)該成10個(gè)輸出了size大小為10,size大小表示有效字符串的數(shù)。

size()與length()方法底層實(shí)現(xiàn)原理完全相同,引入size()的原因是為了與其他容器的接口保持一致,一般情況下基本都是用size()。
clear()只是將string中有效字符清空,不改變底層空間大小。
resize(size_t n) 與 resize(size_t n, char c)都是將字符串中有效字符個(gè)數(shù)改變到n個(gè),不同的是當(dāng)字 符個(gè)數(shù)增多時(shí):resize(n)用0來(lái)填充多出的元素空間,resize(size_t
n, char c)用字符c來(lái)填充多出的 元素空間。注意:resize在改變?cè)貍€(gè)數(shù)時(shí),如果是將元素個(gè)數(shù)增多,可能會(huì)改變底層容量的大小,如果是將元素個(gè)數(shù)減少,底層空間總大小不變。
reserve(size_t res_arg=0):為string預(yù)留空間,不改變有效元素個(gè)數(shù),當(dāng)reserve的參數(shù)小于string的底層空間總大小時(shí),reserver不會(huì)改變?nèi)萘看笮?/p>

三、string類對(duì)象的訪問(wèn)及遍歷操作

operator[] 返回pos位置的字符,const string類對(duì)象調(diào)用
begin+ end
begin獲取一個(gè)字符的迭代器 + end獲取最后一個(gè)字符下一個(gè)位置的迭代器
rbegin + rend
begin獲取一個(gè)字符的迭代器 + end獲取最后一個(gè)字符下一個(gè)位置的迭代器
范圍for C++11支持更簡(jiǎn)潔的范圍for的新遍歷方式

文檔介紹:

1.operator[]方式
字符串中指定位置的字符。如果字符串對(duì)象是const限定的,則函數(shù)返回一個(gè)const char&。否則,它將返回一個(gè)字符&

通過(guò)for循環(huán)方式打印出數(shù)據(jù)這和數(shù)組遍歷打印數(shù)據(jù)差不了多少。
2.迭代器
返回一個(gè)迭代器,該迭代器指向字符串結(jié)束字符的過(guò)去部分。
結(jié)束字符后面的過(guò)去字符是字符串中最后一個(gè)字符后面的理論字符。不得取消對(duì)其的引用。
由于標(biāo)準(zhǔn)庫(kù)函數(shù)使用的范圍不包括其結(jié)束迭代器所指向的元素,因此此函數(shù)通常與string::begin結(jié)合使用,以指定包含字符串中所有字符的范圍。
如果對(duì)象是空字符串,則此函數(shù)返回與string::begin相同的值。
一個(gè)迭代器,指向字符串的末尾。
如果字符串對(duì)象是const限定的,則函數(shù)返回一個(gè)const_迭代器。否則,它將返回一個(gè)迭代器。
成員類型迭代器和常量迭代器是隨機(jī)訪問(wèn)迭代器類型(分別指向字符和常量字符)。

void text() {	string s1("123456789");	string sss("123456");	for (int i = 0; i < s1.size(); i++) {		cout << s1[i] << " " ;	}	string::iterator it = s1.begin();	while (it != s1.end()) {		cout << *it << " ";		it++;	}}


3.反向迭代器
就是利用迭代器逆向輸出string中的數(shù)據(jù)

string::reverse_iterator it = s1.rbegin();	while (it != s1.rend()) {		cout << *it << " ";		it++;	}

這不是難實(shí)現(xiàn),利用for循環(huán)也可以逆向打印數(shù)據(jù)。
4.范圍for
C++新標(biāo)準(zhǔn)提供的范圍for語(yǔ)句.這種語(yǔ)句遍歷給定序列中個(gè)元素并對(duì)序列中每一個(gè)值執(zhí)行某種操作,其語(yǔ)法形式是:

for(declaration : expression)
statement

其中,expression 部分是一個(gè)對(duì)象,用于表示一個(gè)序列。declaration 部分負(fù)責(zé)定義一個(gè)變量,該變量將用于訪問(wèn)序列中的基礎(chǔ)元素。每次迭代,declaration部分的變量會(huì)被初始化為expression部分的下一個(gè)元素值。

此例中通過(guò)使用auto關(guān)鍵字讓編譯器來(lái)決定變量o的類型,這里o的類型是char.每次迭代,s1的下一個(gè)字符被拷貝給o,因此該循環(huán)可以讀作“對(duì)于字符串str中的每個(gè)字符o,”執(zhí)行某某操作。此例中的某某操作 即輸出一個(gè)字符,然后換行。

四、string的修改

push_back 在字符串后尾插字符c
append 在字符串后追加一個(gè)字符串
operator+= (重點(diǎn)) 在字符串后追加字符串str
c_str(重點(diǎn)) 返回C格式字符串
find + npos(重點(diǎn)) 從字符串pos位置開始往后找字符c,返回該字符在字符串中的位置
rfind 從字符串pos位置開始往前找字符c,返回該字符在字符串中的位置 substr
在str中從pos位置開始,截取n個(gè)字符,然后將其返回


push_back只能插入一個(gè)字符,而且不能插入字符串,而append不竟能插入字符,而且能插入字符串。
operator+= 在字符串后追加字符串str,這也是字符串修改中最常用的方法。
find:
find的文檔介紹

第一個(gè)匹配的第一個(gè)字符的位置。
如果未找到匹配項(xiàng),則函數(shù)返回字符串::npos。
size_ t是無(wú)符號(hào)整數(shù)類型(與成員類型string::size_t類型相同)。

找到就返回它的位置,找不到返回-1,也有的地方說(shuō)是npos這里npos意思是一至的。
文檔中是這樣介紹:

npos是一個(gè)靜態(tài)成員常量值,對(duì)于類型為size_t的元素,其值可能最大。
此值在字符串的成員函數(shù)中用作len(或sublen)參數(shù)的值時(shí),表示“直到字符串結(jié)束”。
作為返回值,它通常用于指示不匹配。
此常量的定義值為-1,因?yàn)閟ize_t是無(wú)符號(hào)整數(shù)類型,所以它是此類型的最大可能表示值。

substr:

這個(gè)例子是把s從第3個(gè)字符開始截取到npos也就是字符串末尾。
五、其他方法
operator+盡量少用,因?yàn)閭髦捣祷?,?dǎo)致深拷貝效率低
拼接字符串

把兩個(gè)字符串拼接成一個(gè)字符串。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/123600.html

相關(guān)文章

  • JavaScript 程序員可以從C++中學(xué)到什么

    摘要:特別是所謂的不需要的引用可能會(huì)導(dǎo)致內(nèi)存泄漏,這意味著程序占用的內(nèi)存比實(shí)際需要的多,從而降低了內(nèi)存的效率。但是如果我們能夠意識(shí)到內(nèi)存泄漏的風(fēng)險(xiǎn),就可以采取措施將其刪除。意外的使用全局變量是導(dǎo)致內(nèi)存泄漏的一個(gè)常見原因。 作者:Bret Cameron翻譯:瘋狂的技術(shù)宅原文:https://medium.com/@bretcamer... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你...

    不知名網(wǎng)友 評(píng)論0 收藏0
  • 【修煉內(nèi)功】[JVM] 深入理解JVM之ClassLoader

    摘要:本文已收錄修煉內(nèi)功躍遷之路在誕生之初便提出,各提供商發(fā)布很多不同平臺(tái)的虛擬機(jī),這些虛擬機(jī)都可以載入并執(zhí)行同平臺(tái)無(wú)關(guān)的字節(jié)碼。設(shè)計(jì)者在第一版虛擬機(jī)規(guī)范中便承諾,時(shí)至今日,商業(yè)機(jī)構(gòu)和開源機(jī)構(gòu)已在之外發(fā)展出一大批可以在上運(yùn)行的語(yǔ)言,如等。 本文已收錄【修煉內(nèi)功】躍遷之路 Java在誕生之初便提出 Write Once, Run Anywhere,各提供商發(fā)布很多不同平臺(tái)的虛擬機(jī),這些虛擬機(jī)...

    荊兆峰 評(píng)論0 收藏0
  • 從表到里學(xué)習(xí)JVM實(shí)現(xiàn)

    在社會(huì)化分工、軟件行業(yè)細(xì)分專業(yè)化的趨勢(shì)下,會(huì)真的參與到底層系統(tǒng)實(shí)現(xiàn)的人肯定是越來(lái)越少(比例上說(shuō))。真的會(huì)參與到JVM實(shí)現(xiàn)的人肯定是少數(shù)。 但如果您對(duì)JVM是如何實(shí)現(xiàn)的有興趣、充滿好奇,卻苦于沒有足夠系統(tǒng)的知識(shí)去深入,那么可以參考RednaxelaFX整理的這個(gè)書單。 showImg(http://segmentfault.com/img/bVbGzn); 本豆列的脈絡(luò)是:    1. JV...

    Cristic 評(píng)論0 收藏0
  • 系統(tǒng)地學(xué)習(xí)C++

    摘要:本書主要圍繞一系列逐漸復(fù)雜的程序問(wèn)題,以及用以解決這些問(wèn)題的語(yǔ)言特性展開講解。你不只學(xué)到的函數(shù)和結(jié)構(gòu),也會(huì)學(xué)習(xí)到它們的設(shè)計(jì)目的和基本原理。因此我們把精力集中在最有價(jià)值的地方。本書不僅是對(duì)模板的權(quán)威解釋,而且本書還深入地介紹了其他一般的思想。 C++ 入門教程(41課時(shí)) - 阿里云大學(xué) C+...

    joyqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<