免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
第八章 標(biāo)準(zhǔn)模板庫(kù)STL(一)

string類

  1. 原型:typedef basic_string<char> string;

  2. 常見(jiàn)操作

    //初始化string s1("Hello world!"),s2="Test",s3(8,'x'),s4; //代表8個(gè)x組成的字符串s4='c';//定位&賦值s1[1]='A';s1.at(1)='B'; //at成員函數(shù)速度較慢,但會(huì)進(jìn)行范圍檢查,數(shù)組越界訪問(wèn)會(huì)拋出異常out_of_ranges1.assign(s2); //等價(jià)于s1=s2;s1.assign(s2,1,3); //將s2從下標(biāo)1開始的3個(gè)字符賦給s1//連接s1+=s2;s1.append(s2); //等價(jià)于s1+=s2s1.append(s2,1,3); //將s2下標(biāo)1開始的至多3個(gè)字符連接到s1//比較大?。嚎芍苯佑?gt;,>=,<,<=,==,!=,或bool b=s1.compare(s2);bool b=s1.compare(0,2,s2);bool b=s1.compare(0,2,s2,1,2); //將s1下標(biāo)0開始的2個(gè)字符與s2從下標(biāo)1開始的2個(gè)字符比較//交換s1和s2s1.swap(s2);//子串s2=s1.substr(0,3); //起始下標(biāo)0,長(zhǎng)度3//替換和插入s1.replace(1,3,s2); //s1下標(biāo)1后3位字符替換成s2s1.replace(1,3,s2,0,5); //s1下標(biāo)1后3位字符替換成s2下標(biāo)0后的5位字符s1.insert(2,s2); //下標(biāo)2處插入s2s1.insert(2,s2,0,5); //s2起始下標(biāo)0,長(zhǎng)度5//刪除s1.erase(5); //刪除下標(biāo)5后面的全部字符//查找s1.find("lo"); //查找第一個(gè)“l(fā)o"字符串起始下標(biāo),識(shí)別失敗返回string::nposs1.find("lo",3); //從下標(biāo)3開始查找s1.rfind("lo"); //反向查找s1.find_first_of("abcd"); //從頭查找第一次出現(xiàn)abcd任一字符的下標(biāo)s1.find_last_of("abcd"); //查找最后一個(gè)s1.find_first_not_of("abcd");s1.find_last_not_of("abcd");//獲取char*型指針,修改string可能會(huì)導(dǎo)致指針p出錯(cuò)const char *p=s1.c_str;const char *p=s1.data();
  3. 字符串流處理(需要加sstream頭文件)

    istringsteam Input("This test 3.5 A"); string s1,s2; double d; char ch;Input>>s1>>s2>>d>>ch;ostringstream Output;Output<<s1<<" "<<s2<<" "<<d<<" "<<ch<<endl;cout<<Output.str(); //該函數(shù)返回string類型

STL容器

基本概念

  1. 容器:可容納各種數(shù)據(jù)類型的通用結(jié)構(gòu) ,是類模板
  2. 迭代器:可用于依次存取容器中元素,類似指針
  3. 算法: 用來(lái)操作容器中元素的函數(shù)模板

類型

  1. 順序容器:無(wú)序,可在任意位置插入元素
    • 可變數(shù)組vector(<vector>):隨機(jī)訪問(wèn)元素時(shí)間為常數(shù),在尾部增刪元素的時(shí)間一般為常數(shù)
    • 雙向隊(duì)列deque(<deque>):隨機(jī)訪問(wèn)元素時(shí)間為常數(shù)(速度僅次于vector),在首尾插入元素時(shí)間一般為常速
    • 雙向鏈表list(<list>):不支持隨機(jī)訪問(wèn),找到位置后在任意位置增刪元素時(shí)間為常數(shù)
  2. 關(guān)聯(lián)容器:有序,增刪元素自動(dòng)排序,查找性能佳
    • set/multiset集合
    • map/multimap 圖(映射)
  3. 容器適配器
    • 棧stack(<stack>)
    • 隊(duì)列queue(<queue>)
    • 優(yōu)先隊(duì)列priority_queue(<queue>)

成員函數(shù)

  1. 順序容器和關(guān)聯(lián)容器都有的成員函數(shù):begin(), end(), rbegin(), rend(), erase(), clear()
  2. 順序容器的常用成員函數(shù):front(), back(), push_back(), pop_back(), erase()

迭代器

  1. 類似指針,分const和非const兩種,非const型可以修改其指向的元素

    容器類名::iterator 變量名容器類名::const_iterator 變量名
  2. 分雙向迭代器和隨機(jī)迭代器

    • 雙向迭代器操作:++p,p++,--p,p--,*p,p=p1,==,!=
    • 隨機(jī)迭代器(如vector、deque):支持雙向迭代器所有操作,支持加減整數(shù),下標(biāo)索引,大小比較,p-p1(計(jì)算兩指針元素個(gè)數(shù))
  3. 在模板中寫迭代器時(shí),最好在前面加上 typename關(guān)鍵字,否則可能會(huì)編譯錯(cuò)。VS可能無(wú)此問(wèn)題,但是Dev C++和服務(wù)器上的編譯環(huán)境會(huì)有這個(gè)問(wèn)題,比如:

    typename list<T>::iterator i; //typename用于指明list<T>::iterator是個(gè)類型

算法(函數(shù)模板)

  1. find順序查找

    template<class Inlt,class T>Inlt find(Inlt first,Inlt last,const T& val); //用==判斷相等,找不到則返回last指針
  2. bianry_search二元查找,僅適用于由小到大排好序的順序容器,找到返回true,否則false,用<判斷

vector

  1. 示例

    int a[]={1,2,3,4,5};vector<int> v(a,a+5); //拷貝整個(gè)數(shù)組cout<<v.end()-v.begin()<<endl; //迭代器相減v.insert(v.begin()+2,13); //v[2]處插入元素v.erase(v.begin()+2);//刪除元素vector<int> v2(4,100);v2.insert(v2.begin(),v.begin()+1,v.begin()+3); //v2[0]插入v區(qū)間v.erase(v.begin()+1,v.begin()+3); //刪除區(qū)間

deque

支持vector所有操作,且支持push_front和pop_front操作隊(duì)首元素 O(1)

list

  1. 支持順序容器所有操作

  2. 其他操作

    list<int> lst(a,a+5); //拷貝整個(gè)數(shù)組push_front(T val);pop_front();sort(); //排序,不支持STL的排序函數(shù)sort(T op); //按照某種規(guī)則排序remove(T val); //刪除指定值的元素unique(); //刪除所有和前一個(gè)元素相等的元素(若去重,需要先sort)merge(list<T> lst); //與lst鏈表合并,并清空l(shuí)streverse(); //顛倒鏈表 splice(Inlt p1,list<T> lst2,Inlt p2,Inlt p3);//將lst2的[p2,p3)移動(dòng)到p1前面

函數(shù)對(duì)象

  1. 在類中對(duì)括號(hào)進(jìn)行重載,使類對(duì)象具有類似函數(shù)的功能

  2. 目的:增強(qiáng)函數(shù)復(fù)用性,不用針對(duì)每種情況編寫一個(gè)函數(shù)

    template<class T>class SumPower{ //用于計(jì)算某個(gè)n次方和	int power;	public:	SumPower(int n):power(n){}	T operator() (const T& init,const T& tmp){		T v=tmp;		for(int i=0;i<power-1;++i) v*=tmp;		return init+v;	} };template<class It,class T,class Pred>  //計(jì)算累加值T CalcPower(It first,It last,T init,Pred op){	for(;first!=last;++first) init=op(init,*first); 	return init;}int main(){	int a[]={1,2,3,4,5,6,7,8,9,10};	vector<int> v(a,a+10);	cout<<"立方和: "<<CalcPower(v.begin(),v.end(),0,SumPower<int>(3));	return 0;}

    less和greater函數(shù)對(duì)象

    1. less<T>()按照從小到大的方式排列
    2. greater<T>()按照從大到小的方式排列
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++ STL 學(xué)習(xí)小結(jié)
C++的標(biāo)準(zhǔn)模板庫(kù)(STL)簡(jiǎn)介
STL模板總結(jié)
stl容器學(xué)習(xí)總結(jié)
STL學(xué)習(xí)小結(jié)
《白話C++》第三章《感受》(一)3.13.Hello STL 列表篇
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服