最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中string使用+號(hào)與int拼接方式

 更新時(shí)間:2022年07月20日 10:00:33   作者:幽靈球  
這篇文章主要介紹了C++中string使用+號(hào)與int拼接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

string使用+號(hào)與int拼接

由于C++中的沒(méi)有默認(rèn)的使用string類型直接用加號(hào)拼接數(shù)字,但是時(shí)長(zhǎng)會(huì)使用的用string憑借數(shù)字的情況,所以重載了“+”和“+=”實(shí)現(xiàn)字符串與數(shù)字憑借功能。

將以下代碼復(fù)制到需要使用位置的上方即可使用“+”和“+=”來(lái)拼接字符串和數(shù)字。

string operator+(string &content, int number) {
?? ?string temp = "";
?? ?char t = 0;
?? ?while (true) {
?? ??? ?t = number % 10 + '0';
?? ??? ?temp = t + temp;
?? ??? ?number /= 10;
?? ??? ?if (number == 0) {
?? ??? ??? ?return content + temp;
?? ??? ?}
?? ?}
}
//由于+=會(huì)調(diào)用+號(hào),所以 += 必須寫在 + 號(hào)重載后面
string& ?operator+=(string &content, int number) {
?? ?return content = content + number;
}

string類的+與+=運(yùn)算符

說(shuō)一說(shuō)C++ string類的運(yùn)算符+ 與 運(yùn)算符 +=

string對(duì)象的運(yùn)算符+和運(yùn)算符+=效率差很多

+比+=更耗時(shí)間更占空間

以下兩句str=str+a; 與str+=a;看起來(lái)差不多,其實(shí)效率差很多。

string str,a;str=str+a;str+=a;

今天在力扣上寫代碼,同一道題,同樣的代碼,差別就是我把str+=a;改成了str=str+a;運(yùn)行時(shí)間翻了倍,而且內(nèi)存消耗多了十幾倍,如圖:

雖說(shuō)力扣上的運(yùn)行時(shí)間會(huì)有波動(dòng),但也不至于差別這么大,然后我去搜了好些博客看,有些博主實(shí)際運(yùn)行驗(yàn)證了在string的使用中,使用+=比使用+快很多。我翻《C++ Primer》,大概知道了原因。       

原因:

  • str=str+a;會(huì)先將等號(hào)右邊的兩個(gè)string對(duì)象內(nèi)容相加,得到一個(gè)新的string對(duì)象,再把這個(gè)新的對(duì)象賦給等號(hào)左邊的string對(duì)象。
  • str+=a;直接將等號(hào)右邊的string對(duì)象內(nèi)容追加到左邊的string對(duì)象后面。

這兩者的差別就是,+相比于+=在這個(gè)過(guò)程中會(huì)多產(chǎn)生一個(gè)新對(duì)象,創(chuàng)建新對(duì)象,不僅要時(shí)間,新的對(duì)象還要占內(nèi)存,所以+=效率較高。   

為什么我在使用string的+運(yùn)算或+=運(yùn)算時(shí)會(huì)報(bào)錯(cuò)?

①例如在string后加上幾個(gè)常量字符串:

string s1="abc" +"de";    // 錯(cuò)誤

原因

  • 之所以兩個(gè)string能相加,是因?yàn)閟tring類把運(yùn)算符+和+=都重載過(guò),+和+=是string的重載函數(shù)。也可以把string和字符串常量相加,但必須保證每個(gè)加法運(yùn)算符(+)的兩側(cè)的運(yùn)算對(duì)象至少有一個(gè)是string。
  • 上面例子中的"abc"、"de"都是字符串常量(const char類型),char是數(shù)據(jù)的基本類型,不是類,更沒(méi)有重載過(guò)+和+=運(yùn)算符,是沒(méi)辦法用加號(hào)直接相加的,所以會(huì)報(bào)錯(cuò)。

②為什么s1= s1+“abc”+“de” 是對(duì)的,s1+= “abc”+“de” 就錯(cuò)了?

string s1;
s1=s1+"abc"+"de";  // 正確
s1+="abc"+"de";	   // 錯(cuò)誤

原因:

  • s1=s1+"abc"+"de"是對(duì)的。前面提到,把string和字符串常量相加,但必須保證每個(gè)加法運(yùn)算符(+)的兩側(cè)的運(yùn)算對(duì)象至少有一個(gè)是string。s1+"abc"+"de"按照加號(hào)從左向右結(jié)合的順序,會(huì)先讓s1+“abc”,再讓這個(gè)結(jié)果加上"de",然后把這個(gè)結(jié)果賦給s1。是合法的。
  • s1+="abc"+"de"錯(cuò)了。因?yàn)橐鹊玫?=右邊的內(nèi)容,也就是進(jìn)行"abc"+"de",字符串常量(const char類型)沒(méi)有辦法直接相加。

再舉一個(gè)例子:

string s1="abcde";
string s2;
s2+=s1[0]+s1[1]+s1[2];	// 錯(cuò)誤

原因:

s1[n]返回的是s1的第n個(gè)字符的引用,是char類型,+=要先得到等號(hào)右邊的內(nèi)容,即進(jìn)行s1[0]+s1[1]+s1[2],但char是不能直接相加的(幾個(gè)char直接相加編譯器會(huì)將它們對(duì)應(yīng)的ASCII碼相加,得到一個(gè)int型的數(shù),得不到你想要的字符串拼接的效果),所以錯(cuò)了,改成s2=s2+s1[0]+s1[1]+s1[2];是ok的。

總之:在string使用時(shí)用+或+=出錯(cuò),可能是你將兩個(gè)字符串常量或者char直接相加了。一定要保證每次+的時(shí)候,+是在對(duì)至少一個(gè)string進(jìn)行操作(可以兩個(gè)string相加,也可以一個(gè)string加上一串字符串常量)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++字符串分割的方法

    c++字符串分割的方法

    這篇文章主要介紹了c++字符串分割的方法,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++之const限定符詳解

    C++之const限定符詳解

    這篇文章主要為大家介紹了C++之const限定符,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • C++求斐波那契數(shù)的實(shí)例代碼

    C++求斐波那契數(shù)的實(shí)例代碼

    這篇文章介紹了C++求斐波那契數(shù)的實(shí)例代碼,有需要的朋友可以參考一下
    2013-10-10
  • C語(yǔ)言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

    C語(yǔ)言報(bào)錯(cuò):Format String Vulnerability的多種解決方案

    Format String Vulnerability(格式化字符串漏洞)是C語(yǔ)言中常見(jiàn)且嚴(yán)重的安全漏洞之一,它通常在程序使用不受信任的輸入作為格式化字符串時(shí)發(fā)生,本文將詳細(xì)介紹Format String Vulnerability的產(chǎn)生原因,提供多種解決方案,需要的朋友可以參考下
    2024-06-06
  • QT中QDataStream二進(jìn)制數(shù)據(jù)讀寫的實(shí)現(xiàn)

    QT中QDataStream二進(jìn)制數(shù)據(jù)讀寫的實(shí)現(xiàn)

    本文主要介紹了QT中QDataStream二進(jìn)制數(shù)據(jù)讀寫的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++ STL array容器訪問(wèn)元素的幾種方式

    C++ STL array容器訪問(wèn)元素的幾種方式

    這篇文章主要介紹了C++ STL array容器訪問(wèn)元素的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++常用的11種設(shè)計(jì)模式解釋及示例代碼詳解

    C++常用的11種設(shè)計(jì)模式解釋及示例代碼詳解

    c++常用的設(shè)計(jì)模式包括單例模式、工廠模式、抽象工廠模式、適配器模式、裝飾者模式、代理模式、外觀模式、橋接模式、組合模式、享元模式、觀察者模式和命令模式等,這篇文章主要介紹了C++常用的11種設(shè)計(jì)模式解釋及示例,需要的朋友可以參考下
    2023-02-02
  • C++編寫高性能服務(wù)器實(shí)例教程

    C++編寫高性能服務(wù)器實(shí)例教程

    這篇文章主要介紹了如何用C++編寫高性能服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)C++有一定的參考價(jià)值,需要的朋友們可以了解下
    2020-06-06
  • c語(yǔ)言double類型默認(rèn)輸出小數(shù)幾位

    c語(yǔ)言double類型默認(rèn)輸出小數(shù)幾位

    在本篇文章里小編給大家分享的是關(guān)于c語(yǔ)言double類型默認(rèn)輸出小數(shù)幾位的相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。
    2020-04-04
  • C++ Qt開發(fā)之LineEdit單行輸入組件的用法詳解

    C++ Qt開發(fā)之LineEdit單行輸入組件的用法詳解

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開發(fā)庫(kù),利用Qt可以快速開發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹LineEdit單行輸入框組件的常用方法及靈活運(yùn)用
    2023-12-12

最新評(píng)論

曲周县| 忻城县| 平乐县| 新沂市| 游戏| 太仓市| 聂荣县| 庄浪县| 闵行区| 蕉岭县| 漳平市| 铜陵市| 德惠市| 承德市| 旬阳县| 温宿县| 襄城县| 高邮市| 克拉玛依市| 格尔木市| 遂昌县| 额济纳旗| 万州区| 潍坊市| 寿阳县| 荔波县| 如皋市| 上高县| 贵阳市| 石楼县| 来凤县| 米易县| 义乌市| 永顺县| 松桃| 安丘市| 新田县| 和平区| 松原市| 左贡县| 阿坝县|