原型:typedef basic_string<char> string;
常見(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();
字符串流處理(需要加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類型
<vector>
):隨機(jī)訪問(wèn)元素時(shí)間為常數(shù),在尾部增刪元素的時(shí)間一般為常數(shù)<deque>
):隨機(jī)訪問(wèn)元素時(shí)間為常數(shù)(速度僅次于vector),在首尾插入元素時(shí)間一般為常速<list>
):不支持隨機(jī)訪問(wèn),找到位置后在任意位置增刪元素時(shí)間為常數(shù)<stack>
)<queue>
)<queue>
)類似指針,分const和非const兩種,非const型可以修改其指向的元素
容器類名::iterator 變量名容器類名::const_iterator 變量名
分雙向迭代器和隨機(jī)迭代器
在模板中寫迭代器時(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è)類型
find順序查找
template<class Inlt,class T>Inlt find(Inlt first,Inlt last,const T& val); //用==判斷相等,找不到則返回last指針
bianry_search二元查找,僅適用于由小到大排好序的順序容器,找到返回true,否則false,用<判斷
示例
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ū)間
支持vector所有操作,且支持push_front和pop_front操作隊(duì)首元素 O(1)
支持順序容器所有操作
其他操作
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前面
在類中對(duì)括號(hào)進(jìn)行重載,使類對(duì)象具有類似函數(shù)的功能
目的:增強(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<T>()
按照從小到大的方式排列greater<T>()
按照從大到小的方式排列聯(lián)系客服