中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

百度做網(wǎng)站一鍵優(yōu)化清理加速

百度做網(wǎng)站,一鍵優(yōu)化清理加速,軟件工程 宣傳網(wǎng)站建設,河南富士康疫情最新消息🔥博客主頁:小王又困了 📚系列專欄:C 🌟人之為學,不日近則日退 ??感謝大家點贊👍收藏?評論?? 目錄 一、string類介紹 二、string類的常用接口說明 📒2.1string類對象的?!?article class="baidu_pl">

🔥博客主頁:小王又困了

📚系列專欄:C++

🌟人之為學,不日近則日退

??感謝大家點贊👍收藏?評論??

目錄

一、string類介紹

二、string類的常用接口說明

📒2.1string類對象的常見構造

📒2.2string類對象的容量操作

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

📒2.4string類對象的修改操作

?編輯

📒2.5string類對象的查找接口

📒2.6string類非成員函數(shù)


🗒?前言:

C語言中,字符串是以'\0'結尾的一些字符的集合,為了操作方便,C標準庫中提供了一些str系列的庫函數(shù), 但是這些庫函數(shù)與字符串是分離開的,不太符合OOP的思想,而且底層空間需要用戶自己管理,稍不留神可能還會越界訪問。C++中引入了string類,給我們提供了便利。

一、string類介紹

  • string是表示字符串的字符串類
  • string類的接口與常規(guī)容器的接口基本相同,再添加了一些專門用來操作string的常規(guī)操作。
  • string在底層實際是:basic_string模板類的別名,typedef basic_string string;。
  • 不能操作多字節(jié)或者變長字符的序列。

小Tips:在使用string類時,必須包含#include頭文件以及using namespace std;

二、string類的常用接口說明

📒2.1string類對象的常見構造

🎀string()

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

int main()
{string s1;cout << s1 << endl;return 0;
}

🎀string(const char* s)

? ??用一個C的字符串(或字符數(shù)組)來構造一個string類的對象。

int main()
{string s1("hellow world");cout << s1 << endl;return 0;
}

🎀string(size_t n, char c)

? ??用?n?個字符來構建string類對象。

int main()
{string s1(5, 'x');cout << s1 << endl;return 0;
}

🎀string(const string&s)

? ? ?string類的拷貝構造,用于構建一個和存在的s1一模一樣的對象。

int main()
{string s1(5, 'x');string s2(s1);cout << s2 << endl;return 0;
}

🎀string(const string& str,size_t pos,size_t len=npos)

? ? 復制strpos位置開始len個字符的部分,使用一個已存在的string類對象的一部分來創(chuàng)建一個新的string類對象。

小Tips:nopsstring類里面的一個靜態(tài)成員變量,它是size_t類型,初始化為-1,即表示整型的最大值。

int main()
{string s1("hellow world");string s2(s1, 7, 5);cout << s2 << endl;return 0;
}

🎀string(const char* s,size_t n)

? ? 用 s 所指向字符串(或字符數(shù)組)的前 n 個字符來初始化創(chuàng)建一個string類對象。

int main()
{char s[] = "hellow ,world";string s1(s, 6);cout << s1 << endl;return 0;
}

📒2.2string類對象的容量操作

🎀size()

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

int main()
{string s1("hellow world");string s2("hellow C++");cout << s1.size() << endl;cout << s2.size() << endl;return 0;
}

🎀length()

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

int main()
{string s1("hellow world");string s2("hellow C++");cout << s1.length() << endl;cout << s2.length() << endl;return 0;
}

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

🎀capacity()

? ? 返回string對象空間的總大小。

int main()
{string s1("hellow world");string s2("hellow world xxxxxxx");cout << s1.capacity() << endl;cout << s2.capacity() << endl;return 0;
}

小Tips:capacity()會返回對象空間的總大小,這個空間是存儲有效字符的空間,實際上會多開辟一個空間,存儲‘\0’。同一個對象在不同的環(huán)境開辟的空間不同,在不同環(huán)境下擴容機制也不同。

📖VS下的擴容機制

int main()
{string s1("hellow world");size_t old = s1.capacity();cout << old << endl;for (size_t i = 0; i < 100; i++){s1.push_back('x');if (old != s1.capacity()){cout << s1.capacity() << endl;old = s1.capacity();}}return 0;
}

VS下默認開辟15個空間用來存儲數(shù)據(jù)(本質(zhì)上是開16個空間,因為還要存‘/0’),第一次擴容是2倍,后面都是以1.5倍的大小去擴容。?

📖Linux下的擴容機制

在Linux環(huán)境下最初對象需要多少空間就開多少,后面一次按照2倍的大小進行擴容。

🎀reserve(size_t n = 0)

? ??為字符串預留空間。直接一次開辟n個空間,可以用來存儲n個有效字符,可以避免每次都要去擴容。

int main()
{string s1("hellow world");s1.reserve(100);size_t old = s1.capacity();cout << s1.capacity() << endl;for (size_t i = 0; i < 100; i++){s1.push_back('x');if (old != s1.capacity()){cout << s1.capacity() << endl;old = s1.capacity();}}return 0;
}

小Tips:當我們確定需要多少空間,就可以使用reserve()提前開辟好空間即可,可以減少擴容次數(shù),?大部分的擴容都是異地擴容,擴容次數(shù)過多會影響效率。

🎀resize(size_t n = 0, char c)

? ??resize(size_t n)resize(size_t n, char c)都是將字符串中有效字符個數(shù)改變到n個,當n小于當前字符串的長度size(),會保留前n個字符,將第n個字符后面的所以字符刪除;當n大于當前字符串的長度size(),先會進行擴容,不同的是當字符個數(shù)增多時:resize(size_t n)用‘\0’來填充多出的元素空間,resize(size_t n, char c)用字符c來填充多出的元素空間。

int main()
{string s1("hellow world");cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;s1.resize(100,'x');cout << s1 << endl;cout << s1.size() << endl;cout << s1.capacity() << endl;return 0;
}	

小Tips:resize在改變元素個數(shù)時,如果是將元素個數(shù)增多,可能會改變底層容量的大小,如果是將元素個數(shù)減少,底層空間總大小不變。 reserve只會影響容量,不改變有效元素個數(shù),當reserve的參數(shù)小于string的底層空間總大小時,reserver不會改變?nèi)萘看笮?即不會縮容。

  • reserve只影響容量,不影響數(shù)據(jù)
  • resize既影響容量,也影響數(shù)據(jù)

🎀clean()

? ? 清理有效字符,不改變?nèi)萘看笮?/span>

int main()
{string s1("Hello C++!");cout << "清空之前的size:" << s1.size() << endl;cout << "清空之前的capacity:" << s1.capacity() << endl;s1.clear();cout << "清空之后的size:" << s1.size() << endl;cout << "清空之后的capacity:" << s1.capacity() << endl;return 0;
}	

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

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

🎀operator()

? ??返回pos位置的字符

int main()
{string s1 = "hellow world";for (size_t i = 0; i < s1.size(); i++){cout << s1[i];}cout << endl;return 0;
}

小Tips:如果字符串是const限定的,則該函數(shù)返回const char&。否則,它將返回char&。at借口與operator[]借口功能類型,operator[]接口發(fā)生越界訪問,程序會直接報錯;at接口發(fā)生越界訪問的時候會拋出異常。

🎀begin、end/rebegin、rend

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

int main()
{string s1 = "hellow world";string::iterator it = s1.begin();while (it != s1.end()){cout << *it;it++;}cout << endl;string::reverse_iterator it = s1.rbegin();//反向迭代器while (it != s1.rend()){cout << *it;it++;}cout << endl;return 0;
}

如上代碼我們看到迭代器和指針的使用方法類似,都可以解引用和++,對象也可以修改。但迭代器的這些操作都是通過運算符重載來實現(xiàn)的。

小Tips:迭代器區(qū)間永遠都是左閉右開,迭代器類型作為類的內(nèi)置類型可以通過類名::itertator直接訪問,例如:string::itertator就表示string類里面的迭代器類型。普通迭代器可讀可寫,const迭代器限制的是其指向的內(nèi)容,只能讀不能寫,而const迭代器本身可以修改。

🎀范圍for

int main()
{string s1("Hello world");for (auto it : s1){cout << it;}cout << endl;return 0;
}

?小Tips:范圍for就是基于迭代器實現(xiàn)的,在底層范圍for會轉(zhuǎn)化成正向迭代器。

📒2.4string類對象的修改操作

🎀push back

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

int main()
{string s1("Hello world");cout << "追加前:" << s1 << endl;s1.push_back('x');cout << "追加后:" << s1 << endl;return 0;
}

🎀append

? ??在字符串后追加一個字符串,它有六種重載形式,如下圖所示:

int main()
{string s1("Hello world");cout << "追加前:" << s1 << endl;s1.append("xxxxxxx");cout << "追加后:" << s1 << endl;string s2 = "abcdefg";cout << "追加前:" << s1 << endl;s1.append(s2, 2, 4);cout << "追加后:" << s1 << endl;return 0;
}

🎀operator+=

? ??通過重載運算符+=實現(xiàn)追加,該運算符重載有三種重載實現(xiàn)形式,如下圖所示:

int main()
{string s1("Hello world");cout << "追加前:" << s1 << endl;s1 += "xxxxxx";cout << "追加后:" << s1 << endl;string s3 = "abcdefg";string s2("Hello world");cout << "追加前:" << s2 << endl;s2 += s3;cout << "追加后:" << s2 << endl;return 0;
}

小Tips:string尾部追加字符的三種方式中,+=操作用的比較多,+=操作不僅可以連接單個字符,還可以連接字符串。

📒2.5string類對象的查找接口

🎀find

? ??從字符串的pos位置開始往后查找字符或字符串,返回其在當前字符串中的位置。

int main()
{string s1 = "hellow world";string s2 = "world";size_t pos = s1.find(s2);cout << pos << endl;return 0;
}

?🎀substr

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

int main()
{string s1 = "test.txt.cpp";size_t pos = s1.rfind('.');if (pos != string::npos){string s2 = s1.substr(pos);cout << s2 << endl;}return 0;
}

📒2.6string類非成員函數(shù)

函數(shù)名稱功能說明
operator+盡量少用,因為傳值返回,導致深拷貝效率低
operator>>輸入運算符重載
operator<<輸出運算符重載
getline獲取一行字符串
relational?operators大小比較

小Tipsoperator>>getline的區(qū)別在于,前者遇到空格‘? ’和換行‘\n’會截止,而后者默認只有遇到換行‘\n’才截止,因此當我們需要從鍵盤讀取一個含有空格的字符串是,只能用getline。


🎁結語:?

? ? ?本次的內(nèi)容到這里就結束啦。希望大家閱讀完可以有所收獲,同時也感謝各位讀者三連支持。文章有問題可以在評論區(qū)留言,博主一定認真認真修改,以后寫出更好的文章。你們的支持就是博主最大的動力。

http://www.risenshineclean.com/news/44900.html

相關文章:

  • 建網(wǎng)站個人主機做服務器天津seo選天津旗艦科技a
  • 重慶社區(qū)官網(wǎng)太原seo關鍵詞排名
  • 企業(yè)網(wǎng)站建設的一般要素包括6百度下載官網(wǎng)
  • 產(chǎn)品宣傳片制作公司seo網(wǎng)站關鍵詞排名優(yōu)化公司
  • 中國在菲律賓做網(wǎng)站百度知道首頁
  • 設計類專業(yè)網(wǎng)站西安核心關鍵詞排名
  • 哪個網(wǎng)站做非洲的生意站長素材
  • 做網(wǎng)站經(jīng)常加班還是appdz論壇seo
  • 購買域名后如何使用搜索網(wǎng)站排名優(yōu)化
  • 給網(wǎng)站首頁圖片做外網(wǎng)超鏈接_為什么會彈出一個服務器登錄窗口網(wǎng)頁制作成品
  • 那些網(wǎng)站可以接私活做比較好的免費網(wǎng)站
  • 北京網(wǎng)站優(yōu)化公司如何輿情分析報告模板
  • 自己在線制作logo免費頭像大連網(wǎng)絡營銷seo
  • 怎么建網(wǎng)站做推廣太原網(wǎng)站關鍵詞排名
  • 建筑方面的網(wǎng)站起飛頁自助建站平臺
  • 如何用框架做網(wǎng)站搜索引擎優(yōu)化seo的英文全稱是
  • 凡科網(wǎng)站代碼怎么短視頻營銷推廣方式
  • 天津電商網(wǎng)站建設seo服務價格表
  • java小說網(wǎng)站怎么做百度一直不收錄網(wǎng)站
  • 深圳官方網(wǎng)站制作搜盤 資源網(wǎng)
  • 哪個網(wǎng)站的體驗做的最好搜索推廣渠道
  • 福建城鄉(xiāng)建設部網(wǎng)站首頁國內(nèi)哪個搜索引擎最好用
  • 專業(yè)網(wǎng)站建設空間seo是什么車
  • 上海給政府機關做網(wǎng)站開發(fā) 萬農(nóng)產(chǎn)品網(wǎng)絡營銷方案
  • 福建參觀禁毒展覽館的網(wǎng)站建設網(wǎng)站設計公司報價
  • 包頭全網(wǎng)營銷網(wǎng)站建設seo外包收費
  • 網(wǎng)站建設智能優(yōu)化seo優(yōu)化技術排名
  • 直播系統(tǒng)百度seo2022新算法更新
  • 單位做網(wǎng)站需要準備什么深圳優(yōu)化怎么做搜索
  • 三門峽網(wǎng)站建設電話熱狗網(wǎng)站排名優(yōu)化外包