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

當(dāng)前位置: 首頁 > news >正文

云南房產(chǎn)網(wǎng)站建設(shè)自媒體平臺哪個收益高

云南房產(chǎn)網(wǎng)站建設(shè),自媒體平臺哪個收益高,網(wǎng)站如何上傳,山東省日照市有專業(yè)做網(wǎng)站的文章目錄1、什么是STL2、STL簡介3、什么是string類4、string類的常用接口說明1、常見構(gòu)造函數(shù)2、容量操作3、迭代器4、其他的標(biāo)準(zhǔn)庫的string類關(guān)于string類的內(nèi)容,可以在cplusplus.com查看到。 1、什么是STL STL是C標(biāo)準(zhǔn)庫的重要組成部分,不僅是一個可復(fù)…

文章目錄

  • 1、什么是STL
  • 2、STL簡介
  • 3、什么是string類
  • 4、string類的常用接口說明
    • 1、常見構(gòu)造函數(shù)
    • 2、容量操作
    • 3、迭代器
    • 4、其他的標(biāo)準(zhǔn)庫的string類


關(guān)于string類的內(nèi)容,可以在cplusplus.com查看到。

1、什么是STL

STL是C++標(biāo)準(zhǔn)庫的重要組成部分,不僅是一個可復(fù)用的組件庫,而且是一個包羅數(shù)據(jù)結(jié)構(gòu)與算法的軟件框架。

2、STL簡介

STL最初是在惠普實驗室誕生的,并向外開源。

原始版本
Alexander Stepanov、Meng Lee 在惠普實驗室完成的原始版本,本著開源精神,他們聲明允許任何人任意
運用、拷貝、修改、傳播、商業(yè)使用這些代碼,無需付費。唯一的條件就是也需要向原始版本一樣做開源使
用。 HP 版本–所有STL實現(xiàn)版本的始祖。

P. J. 版本
由P. J. Plauger開發(fā),繼承自HP版本,被Windows Visual C++采用,不能公開或修改,缺陷:可讀性比較低,
符號命名比較怪異。

RW版本
由Rouge Wage公司開發(fā),繼承自HP版本,被C+ + Builder 采用,不能公開或修改,可讀性一般。

SGI版本
由Silicon Graphics Computer Systems,Inc公司開發(fā),繼承自HP版 本。被GCC(Linux)采用,可移植性好,
可公開、修改甚至販賣,從命名風(fēng)格和編程 風(fēng)格上看,閱讀性非常高。一般學(xué)習(xí)STL要閱讀部分源代碼,
主要參考的就是這個版本。

STL分為仿函數(shù),算法,容器,迭代器,空間配置器,配接器

3、什么是string類

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

string類則是C++定義的一個類。根據(jù)官方文檔記錄:

  1. 字符串是表示字符序列的類
  2. 標(biāo)準(zhǔn)的字符串類提供了對此類對象的支持,其接口類似于標(biāo)準(zhǔn)字符容器的接口,但添加了專門用于操作
    單字節(jié)字符字符串的設(shè)計特性。
  3. string類是使用char(即作為它的字符類型,使用它的默認(rèn)char_traits和分配器類型(關(guān)于模板的更多信
    息,請參閱basic_string)。
  4. string類是basic_string模板類的一個實例,它使用char來實例化basic_string模板類,并用char_traits
    和allocator作為basic_string的默認(rèn)參數(shù)(根于更多的模板信息請參考basic_string)。
  5. 注意,這個類獨立于所使用的編碼來處理字節(jié):如果用來處理多字節(jié)或變長字符(如UTF-8)的序列,這個
    類的所有成員(如長度或大小)以及它的迭代器,將仍然按照字節(jié)(而不是實際編碼的字符)來操作。

總結(jié):

  1. string是表示字符串的字符串類
  2. 該類的接口與常規(guī)容器的接口基本相同,再添加了一些專門用來操作string的常規(guī)操作。
    比特就業(yè)課
  3. string在底層實際是:basic_string模板類的別名,typedef basic_string<char, char_traits, allocator>
    string;
  4. 不能操作多字節(jié)或者變長字符的序列。
    在使用string類時,必須包含#include頭文件以及using namespace std;

簡單看一個代碼

#include <iostream>
#include <string>
using namespace std;int main()
{string s1;string s2("hello world");for (size_t i = 0; i < s2.size(); ++i){s2[i]++;}cout << s2 << endl;return 0;
}

string需要頭文件string,s2[i]++會讓對應(yīng)的字符往后一位,比如h變?yōu)閕,e變?yōu)閒。

在這里插入圖片描述

4、string類的常用接口說明

1、常見構(gòu)造函數(shù)

string(const char* s) 和上面的代碼一樣,可以string s2(“hello world”); 也可以string s2 = “hello world”。

string(const string& str, size_t pos, size_t len = npos)。這個構(gòu)造函數(shù)的意思就是取字符串的一部分,從pos位置開始往后len個字符。

	string s3 = "hello world";string s4(s3, 6, 3);

結(jié)果是wor。第6個位置是空格,打印空格之后3個位置。如果后面的長度過大,那么就會取到字符串結(jié)束,而不是按照實際的len去越界。如果不給len,那么就會按照它的缺省值來打印,len的缺省值是npos,定義中給的值是無符號整數(shù)-1,所以就是整數(shù)的最大值,那么就會打印到字符串結(jié)束。

string(const char* s, size_t n),用字符串前n個進行構(gòu)造。

	string s5("hello world", 6);cout << s5 << endl;

打印hello和空格。

string(size_t n, char c),用n個字符c來構(gòu)造。

	string s6(10, '*');cout << s6 << endl;

cplusplus.com可以查到相關(guān)文檔。

2、容量操作

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

size和length兩個功能一樣,返回有效字符串長度。max_size()則是察看能達到的最大值,42億9千萬多,沒有多大意義。

capacity(),結(jié)果是15,不包含’\0’,返回空間總大小。

int main()
{string s1("hello");s1.push_back('?');s1.append("asda");cout << s1 << endl;return 0;
}

push_back只能加字符,而append可以加字符串。append還有別的用法,在cplusplus.com查看。統(tǒng)合這兩個功能,+=就可以全實現(xiàn)。

	s1 += '!';s1 += "asdghjfk";cout << s1 << endl;

在這里插入圖片描述

capacity函數(shù),會在原有空間不足時進行自動擴容,這個根據(jù)不同的編譯器有不同的結(jié)果,vs是1.5倍擴容,Linux不一樣。

int main()
{string s;cout << sizeof(s) << endl;size_t sz = s.capacity();cout << "make s grow:\n";cout << "capacity changed: " << sz << '\n';for (int i = 0; i < 100; ++i){s.push_back('c');if (sz != s.capacity()){sz = s.capacity();cout << "capacity changed: " << sz << endl;}}
}

也有方法阻止自動擴容,reserve函數(shù),預(yù)留空間。

	string s;s.reserve(100);

不一定會多開100空間,但是一定開得比100多。

resize可以開空間并初始化。

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

在這里插入圖片描述

resize括號里第二個參數(shù)可以加上字符,用來初始化空白的空間為指定的字符。resize也可以刪除數(shù)據(jù),括號的數(shù)字n比size小,就會保留前n個,但不會縮小capacity,縮容對于系統(tǒng)來說難度比較大,系統(tǒng)原生一般不支持。

3、迭代器

int main()
{string s1("hello world");string::iterator it = s1.begin();while (it != s1.end()){cout << *it << " ";++it;}cout << endl;return 0;
}

分析一下這段代碼。我們可以暫且理解為s1指向hello world字符串,s1.begin就是首元素地址,給了it,end則是’\0’的位置,it指向了第一個元素,然后邊打印邊++。

我們也可以用范圍for,不過底層原理都一樣,都是迭代器。

	for (auto ch : s1){cout << ch << " ";}cout << endl;

iterator是string類里的typedef的一個函數(shù)。用迭代器需要用它。迭代器可以反向使用。

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

反向迭代器需要用到reverse_iterator。rbegin指向hello world的d而不是’\0’,rend則指向h前面的位置,這里正是因為是反向,所以++就等于–。

如果是加上了const

void func(const string& s)
{string::const_iterator it = s.begin();while (it != s.end()){cout << *it << " ";++it;}cout << endl;
}

如果是const的變量,那么就得用const_iterator,剛才的反向迭代器也一樣,需要用專用的,并且rbegin這些也得對應(yīng)著用。const修飾,就只能遍歷和讀,而不能寫;反向迭代器加上const,類的函數(shù)就應(yīng)當(dāng)是string::const_reverse_iterator。

4、其他的標(biāo)準(zhǔn)庫的string類

	string s1("hello world");s1[100];s1.at(100);

越界了會直接報錯,如果是at,則會拋異常,雖然也報錯,但可以捕獲異常。

insert整體是插入的意思,有很多函數(shù),可以插入string類對象,可以插入字符串,可以選擇位置來控制插入。

	string s1("hello world");//s1[100];//s1.at(100);s1.insert(0, "hhhh");cout << s1 << endl;s1.insert(4, 1, ' ');cout << s1 << endl;return 0;

在這里插入圖片描述

或者s1.insert(4, " ")這樣。括號里也可以加上迭代器。

	s1.insert(s1.begin() + 4, ' ');cout << s1 << endl;
    string s2("hello world");s2.erase(5, 1);//s2.erase(s2.begin() + 5);cout << s2 << endl;

erase可以用來刪除

在這里插入圖片描述

如果括號里給的數(shù)字過大時,那就會有多少刪多少。

insert和erase可能存在挪動數(shù)據(jù),效率低下,所以不推薦常用。

之前有在字符串空格處把空格換成別的字符的題,現(xiàn)在用C++寫

	string s1("hello, the world");size_t pos = s1.find(' ');if (pos != string::npos){s1.replace(pos, 1, "%20");}cout << s1 << endl;return 0;

這里會把第一個空格改成%20,加個循環(huán)就可以把所有空格都換上。

	while(pos != string::npos){s1.replace(pos, 1, "%20");pos = s1.find(' ');}

不過這個程序還有改進之處。pos = s1.find(’ ', pos + 3),可以從%20的0處往后開始找下一個空格,增加一點效率。replace存在擴容,會把1個字符擴成3個字符。所以我們可以提前開好,避免replace開空間。

	string s1("hello the world");size_t num = 0;for (auto ch : s1){if (ch == ' ')++num;}s1.reserve(s1.size() + 2 * num);size_t pos = s1.find(' ');while(pos != string::npos){s1.replace(pos, 1, "%20");pos = s1.find(' ', pos + 3);}cout << s1 << endl;

結(jié)束。

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

相關(guān)文章:

  • 網(wǎng)站搭建與網(wǎng)站建設(shè)論文收錄網(wǎng)站排名
  • 建設(shè)主管部門門戶網(wǎng)站鄭州網(wǎng)站排名優(yōu)化公司
  • 網(wǎng)站服務(wù)器一個多少錢知名品牌營銷策略
  • 內(nèi)涵吧網(wǎng)站西安百度推廣運營
  • 中國企業(yè)500強排名一覽表seo技術(shù)平臺
  • 企業(yè)門戶網(wǎng)站制作一網(wǎng)信息一個簡單便捷的新聞網(wǎng)站
  • 上海 網(wǎng)站平臺開發(fā)互聯(lián)網(wǎng)營銷師考試題及答案
  • wordpress數(shù)據(jù)庫沒有填寫培訓(xùn)行業(yè)seo整站優(yōu)化
  • 長安網(wǎng)站建設(shè)軟件開發(fā)北京seo關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)站充值平臺怎么做的推廣平臺下載
  • 網(wǎng)站建設(shè)智能優(yōu)化seo軟件推廣哪個好
  • 詳情頁通用模板北京百度seo
  • 東莞市建設(shè)安監(jiān)局網(wǎng)站互動營銷案例100
  • h5用什么網(wǎng)站來做推廣怎么推
  • 泛解析對網(wǎng)站的影響廈門網(wǎng)站推廣優(yōu)化哪家好
  • 寧波易通寧波網(wǎng)站建設(shè)優(yōu)化落實新十條措施
  • 專門教做甜品的網(wǎng)站微信營銷軟件手機版
  • 建設(shè)網(wǎng)站如何贏利企業(yè)網(wǎng)站cms
  • 廣州 網(wǎng)站開發(fā) 公司電話百度seo優(yōu)化排名
  • dw企業(yè)網(wǎng)站設(shè)計品牌營銷包括哪些內(nèi)容
  • 網(wǎng)站加載效果怎么做的百度推廣代運營
  • wordpress mysql重啟資源網(wǎng)站優(yōu)化排名軟件公司
  • 成華網(wǎng)站制作為什么中國禁止谷歌瀏覽器
  • 標(biāo)題優(yōu)化方法郴州seo快速排名
  • 今日濮陽重大新聞seo優(yōu)化服務(wù)是什么意思
  • asp.net做的網(wǎng)站要放到網(wǎng)上空間去_要放哪些文件上去網(wǎng)站建網(wǎng)站建設(shè)網(wǎng)站
  • 房山新農(nóng)村建設(shè)網(wǎng)站深圳百度seo公司
  • 免費代理ip的網(wǎng)站百度搜索推廣操作簡要流程
  • 如何進行網(wǎng)站運營與規(guī)劃打開百度網(wǎng)頁
  • 國外做批發(fā)配件的 在哪個網(wǎng)站百度葷seo公司