下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第C++中string使用+號與int拼接方式目錄string使用+號與int拼接string類的+與+=運算符string對象的運算符+和運算符+=效率差很多為什么我在使用string的+運算或+=運算時會報錯?
string使用+號與int拼接
由于C++中的沒有默認的使用string類型直接用加號拼接數(shù)字,但是時長會使用的用string憑借數(shù)字的情況,所以重載了+和+=實現(xiàn)字符串與數(shù)字憑借功能。
將以下代碼復(fù)制到需要使用位置的上方即可使用+和+=來拼接字符串和數(shù)字。
stringoperator+(stringcontent,intnumber){
stringtemp="";
chart=0;
while(true){
t=number%10+'0';
temp=t+temp;
number/=10;
if(number==0){
returncontent+temp;
}
}
//由于+=會調(diào)用+號,所以+=必須寫在+號重載后面
string
operator+=(stringcontent,intnumber){
returncontent=content+number;
}
string類的+與+=運算符
說一說C++string類的運算符+與運算符+=
string對象的運算符+和運算符+=效率差很多
+比+=更耗時間更占空間
以下兩句str=str+a;與str+=a;看起來差不多,其實效率差很多。
stringstr,a;str=str+a;str+=a;
今天在力扣上寫代碼,同一道題,同樣的代碼,差別就是我把str+=a;改成了str=str+a;運行時間翻了倍,而且內(nèi)存消耗多了十幾倍,如圖:
雖說力扣上的運行時間會有波動,但也不至于差別這么大,然后我去搜了好些博客看,有些博主實際運行驗證了在string的使用中,使用+=比使用+快很多。我翻《C++Primer》,大概知道了原因。
原因:
str=str+a;會先將等號右邊的兩個string對象內(nèi)容相加,得到一個新的string對象,再把這個新的對象賦給等號左邊的string對象。str+=a;直接將等號右邊的string對象內(nèi)容追加到左邊的string對象后面。
這兩者的差別就是,+相比于+=在這個過程中會多產(chǎn)生一個新對象,創(chuàng)建新對象,不僅要時間,新的對象還要占內(nèi)存,所以+=效率較高。
為什么我在使用string的+運算或+=運算時會報錯?
①例如在string后加上幾個常量字符串:
strings1="abc"+"de";//錯誤
原因:
之所以兩個string能相加,是因為string類把運算符+和+=都重載過,+和+=是string的重載函數(shù)。也可以把string和字符串常量相加,但必須保證每個加法運算符(+)的兩側(cè)的運算對象至少有一個是string。上面例子中的abc、de都是字符串常量(constchar類型),char是數(shù)據(jù)的基本類型,不是類,更沒有重載過+和+=運算符,是沒辦法用加號直接相加的,所以會報錯。
②為什么s1=s1+abc+de是對的,s1+=abc+de就錯了?
strings1;
s1=s1+"abc"+"de";//正確
s1+="abc"+"de";//錯誤
原因:
s1=s1+abc+de是對的。前面提到,把string和字符串常量相加,但必須保證每個加法運算符(+)的兩側(cè)的運算對象至少有一個是string。s1+abc+de按照加號從左向右結(jié)合的順序,會先讓s1+abc,再讓這個結(jié)果加上de,然后把這個結(jié)果賦給s1。是合法的。s1+=abc+de錯了。因為要先得到+=右邊的內(nèi)容,也就是進行abc+de,字符串常量(constchar類型)沒有辦法直接相加。
再舉一個例子:
strings1="abcde";
strings2;
s2+=s1[0]+s1[1]+s1[2];//錯誤
原因:
s1[n]返回的是s1的第n個字符的引用,是char類型,+=要先得到等號右邊的內(nèi)容,即進行s1[0]+s1[1]+s1[2],但char是不能直接相加的(幾個char直接相加編譯器會將它們對應(yīng)的ASCII碼相加,得到一個int型的數(shù),得不到你想要的字符串拼接的效果),所以錯了,改成s2=s2+s1[0]+s1[1]+s1[2];是ok的。
總之:在string使用時用+或+=出錯,可能是你將兩個字符串常量或者
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江嘉興市海寧市馬橋派出所招聘馬橋街道流動人口協(xié)管員3人筆試備考試題及答案解析
- 2026江蘇南通市啟東市教育體育系統(tǒng)招聘編外聘用人員2人筆試備考試題及答案解析
- 人事部培訓規(guī)章制度
- 培訓體系考核制度
- 救生員定期培訓管理制度
- 農(nóng)家樂人員培訓制度
- 健全培訓臺賬制度
- 缺少培訓評估制度
- 培訓學校藝考生管理制度
- 培訓各部門規(guī)章制度
- 金融領(lǐng)域人工智能算法應(yīng)用倫理與安全評規(guī)范
- 2026長治日報社工作人員招聘勞務(wù)派遣人員5人備考題庫及答案1套
- 機動車駕校安全培訓課件
- 河道清淤作業(yè)安全組織施工方案
- 2025年役前訓練考試題庫及答案
- 2026年七臺河職業(yè)學院單招職業(yè)技能測試題庫附答案
- 2021海灣消防 GST-LD-8318 緊急啟停按鈕使用說明書
- 煙花爆竹零售經(jīng)營安全責任制度
- 2023年和田地區(qū)直遴選考試真題匯編含答案解析(奪冠)
- ICG熒光導(dǎo)航在肝癌腹腔鏡解剖性肝切除中的應(yīng)用2026
- 城市軌道交通服務(wù)與管理崗位面試技巧
評論
0/150
提交評論