日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【2019暑假刷题笔记-STL绪论】总结自《算法笔记》

發(fā)布時(shí)間:2025/3/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目? ? ?錄

一、vector的常見(jiàn)用法

二、set的常見(jiàn)用法?

三、string的常見(jiàn)用法

四、map的常見(jiàn)用法


一、vector的常見(jiàn)用法

vector是一種可變長(zhǎng)數(shù)組,常用于使用vector通過(guò)鄰接表存儲(chǔ)圖;它本身也可以當(dāng)作數(shù)組使用,在一些元素不確定的時(shí)候可以很好的節(jié)省空間。?

vector<vector<int> > a; a.resize(m);//行數(shù)為m for(int i=0;i<m;i++)//每行列數(shù)為na[i].resize(n); //之后可采用遍歷的方式為a數(shù)組賦值 int t; for(int i=0;i<m;i++) {for(int j=0;j<n;j++)a[i][j]=t; }/*也可以這樣*/ vector<int> a[100];//可以理解為100行,行中的元素自己push_back();a[i].push_back(x);

?

  • vector的定義:vector<typename> name? ||? ex. vector<int> name。二維數(shù)組表示
  • vector內(nèi)元素的訪問(wèn):(1) 通過(guò)下標(biāo)訪問(wèn),ex. vi[index];(2) 使用迭代器訪問(wèn) /* 迭代器的定義:vector<int>::iterator it 迭代器迭代數(shù)組開(kāi)始標(biāo)志:it.begin()+i 其效果和vi[i]一致 迭代器迭代數(shù)組結(jié)束標(biāo)志:it.end() 其指的是數(shù)組最后一個(gè)元素后面的那個(gè),不存在任何元素 begin()和end()是左閉右開(kāi)的思考來(lái)做的 一般來(lái)說(shuō)使用迭代器做循環(huán)是 for(vector<int>::iterator it=vi.begin();it!=vi.end;i++)printf("%d",*(it+i)) 只有vector和string容器可以這么做,其他只能用*it(在循環(huán)條件中it++) */

    ?

  • ?push_back()函數(shù):

    /* 使用方式: vi.push_back(x); 把x的值放在vector類型數(shù)組vi數(shù)組最后面 */

    ?

  • pop.back()函數(shù):

    /* 使用方式: vi.pop_back(x); 可以刪除vector的尾元素x */

    ?

  • size()函數(shù):?

    /* 使用方式: vi.size(); 獲得vector中元素的個(gè)數(shù) */

    ?

  • clear()函數(shù):

    /* 使用方法: vi.clear(); 將vi數(shù)組清空 */

    ?

  • ?insert()函數(shù):

    /* 使用方法: vi.insert(it,x); 例如: vi.insert(vi.begin()+2,-1); 把-1插到vector數(shù)組的第2個(gè)位置,其后面所有數(shù)字后移一位 */

    ?

  • erase()函數(shù):

    ? /* 兩種使用辦法(1)vi.erase(it);刪除單個(gè)元素,例如vi.erase(it.begin()+3);刪除vi中第4個(gè)元素,同時(shí)后面的元素向前移動(dòng)一位。(2)vi.erase(vi.begin()+1,vi.begin()+4);刪除選定區(qū)間中的所有元素,ex.中為刪除vi[1],vi[2],vi[3],左閉右開(kāi)思想。后面的元素向前移3位*/

    ?

  • 二、set的常見(jiàn)用法?

    set是一種內(nèi)部自動(dòng)升序排列且不含重復(fù)元素的容器,也就是一個(gè)有序的集合。適用于要求去重且不方便開(kāi)數(shù)組的情況。

  • set的定義:set<typename> name
  • set內(nèi)元素的訪問(wèn): /* 和vector一樣的是,set容器的迭代定義依舊是set<typename>::iterator it 不同的是:不能使用*(it+i)了 */ for(set<int>::iterator it=st.begin();it!=st.end();it++)printf("%d",*it);

    ?

  • insert()函數(shù): st.insert(x);//將x插入st中

    ?

  • find()函數(shù): set<int>::iterator it=st.find(x) //在st中尋找一個(gè)x元素

    ?

  • erase()函數(shù): /* 刪除單個(gè)元素的形式 1 st.erase(x); //刪除元素x 2 st.erase(st.find(x)) //刪除元素x刪除一個(gè)區(qū)間的所有元素 1 st.erase(first,last) 2 st.erase(it,st.end()); */

    ?

  • size()函數(shù): st.size();//得到st的元素個(gè)數(shù)

    ?

  • clear()函數(shù): st.clear();//清除set所有元素

    ?

  • 三、string的常見(jiàn)用法

    string用來(lái)存儲(chǔ)字符串,存儲(chǔ)的字符串也可以通過(guò)c_str()函數(shù)轉(zhuǎn)化為字符數(shù)組,如

    string str="abcd"; printf("%s\n",str.c_str()); /*否則需要cin,cout輸入輸出,二者都在#include <iostream>中*/

    同時(shí)#include <string>和#include <string.h>是不一樣的,前者是STL的容器,后者則是C語(yǔ)言的頭文件。

  • string的定義: /*定義*/ string str; /*初始化定義*/ string str="abcd";

    ?

  • string中內(nèi)容的訪問(wèn): /*訪問(wèn)方式*/ /*下標(biāo)訪問(wèn)法,同字符數(shù)組類似*/ printf("%c",str[i]);/*迭代器訪問(wèn)法,格式與set,vector等不同,不需要typename,因?yàn)閟tring只有字符型*/ string::iterator it; for(string::iterator it=str.begin();it!=str.end();it++){printf("%c",*it); }

    ?

  • string類型字符串的拼接和比較: /*字符串拼接*/ string str1="abc",str2="def",str3; str3=str1+str2;/*字符串的比較*/ if(str1 < str2) ... if(str1 != str2) ... if(str1 >= str2) ...

    ?

  • length()/size()函數(shù): /*返回string的長(zhǎng)度*/ string str="abcxyz",str="opq"; printf("%d %d",str.length(),str.size());

    ?

  • insert()函數(shù): /*insert()函數(shù)兩種插入辦法*/ /*str.insert(pos,string),pos表示插入的位置,string表示要插入的字符串*/ string str="abcdef",str2="opq"; str.insert(3,str2); /*得到abcopqdef*//*str.insert(it,it2,it3) it是欲插入的位置,it2,it3是待查字符串的首尾迭代器*/ str.insert(str.begin()+3,str2.begin(),str.end()) /*表示在str的第三個(gè)位置插入str2整個(gè)字符串*/

    ?

  • erase()函數(shù)?: /*erase()函數(shù)刪除一個(gè)元素*/ str.erase(str.begin()+4);/*erase()函數(shù)刪除一個(gè)區(qū)間的元素有兩種方式*//*第一種:str.erase(first,last);*/ str.erase(str.begin()+2,str.end()-1);/*第二種:str.erase(pos,length);從pos開(kāi)始刪除length個(gè)元素*/ str.erase(3,2);

    ?

  • clear()函數(shù): /*清除字符串*/ str.clear();

    ?

  • substr()函數(shù): /*substr(pos,length);返回從pos個(gè)字符及之后length-1個(gè)字符,即返回字符串*/ string str="helloworld"; str.substr(3,4); /*得到lowo的字符串*/

    ?

  • string::npos: /*表示-1或者4294967295,一般和str.find()聯(lián)用,如果find(x)==string::npos,表示找到不到*/

    ?

  • find()函數(shù): /*兩種str.find()方式,返回第一次出現(xiàn)的位置*//*str.find(str)*/ if(str.find(str)!=string::npos) ... /*表示找到了,反之表示沒(méi)找到*//*str.find(str,7)*/ if(str.find(str,7)!=string::npos) ... /*表示找到了,反之表示沒(méi)找到*/

    ?

  • replace()函數(shù): /*兩種replace()方式*//*str.replace(pos,len,str2); 把str從pos號(hào)位開(kāi)始,長(zhǎng)度為len的字串替換為str2*//*str.replace(it,it2,str2); 把str從it號(hào)位開(kāi)始到it2號(hào)位的前一位(左閉右開(kāi)原則)替換為str2*/

    ?

  • 四、map的常見(jiàn)用法

    map是可以將任何基本類型映射到任何基本類型的容器。需要#include <map>頭文件和using namespace std;如map<char,int> mp;(是將字符型映射為整型)? map<string.int> mp(將字符串映射為整型),不使用map容器按數(shù)組的定義只能將int型映射為其他類型。

    map的常見(jiàn)用途是:需要建立字符(或者字符串)與整數(shù)之間映射關(guān)系之間的題目,使用map可以減少代碼量;判斷打證書(shū)或者其他類型數(shù)據(jù)是否存在的時(shí)候,可一件map當(dāng)做bool使用;字符串和字符串的映射也有可能遇到。

  • map的定義: /*map容器定義不同與其他容器,其容器定義如下*/map<typename,typename> mp; /* 第一個(gè)typename表示key,第二個(gè)typename表示value,如 map<char,int> mp; */

    ?

  • map容器內(nèi)元素的訪問(wèn): /*map容器內(nèi)元素的訪問(wèn)有兩種方式*//*第一種是下標(biāo)訪問(wèn)*/ mp['a']=1; printf("%d",mp['a']);/*第二種是使用迭代器訪問(wèn)*/ mp['m']=1; mp['n']=2; for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)printf("%c %d",it->first,it->second);/*在第二個(gè)例子中it->first指向key,it->second指向value,且map會(huì)以key的值從小到大的順序自動(dòng)排序,和set容器自動(dòng)排序一樣,采用紅黑樹(shù)實(shí)現(xiàn)*/

    ?

  • find()函數(shù): /*find(key)返回值為key的映射的迭代器*/ mp.find('a');

    ?

  • erase()函數(shù): /*erase()函數(shù)有兩種使用方法,即刪除單個(gè)元素(有兩種辦法,時(shí)間復(fù)雜度不同)和刪除一個(gè)區(qū)間內(nèi)所有元素*//*使用迭代器刪除單個(gè)元素,時(shí)間復(fù)雜度為O(1)*/ map<char,int>::iterator it=mp.find('a'); mp.erase(it);/*使用key刪除單個(gè)元素,時(shí)間復(fù)雜度為O(logN)*/ map.erase('a');/*刪除一個(gè)區(qū)間內(nèi)所有元素,mp.erase(first,last);還是遵循左閉右開(kāi)原則*/ map<char,int>::iterator it_first=mp.find('a'); map<char,int>::iterator it_last=mp.find('c'); mp.erase(it_first,it_last);

    ?

  • size()函數(shù): /*map容器內(nèi)的映射對(duì)數(shù)*/ mp.size();

    ?

  • clear()函數(shù): /*清除map容器中所有元素的函數(shù)*/ mp.clear();

    ?

  • 總結(jié)

    以上是生活随笔為你收集整理的【2019暑假刷题笔记-STL绪论】总结自《算法笔记》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。