c/c++刷題常用


  • 頭文件
    • stdio.h

      c語(yǔ)言的標(biāo)準(zhǔn)輸入輸出竞思,常用printf;scanf

    • iostream

      c++語(yǔ)言的標(biāo)準(zhǔn)輸入輸出,重用cin;cout

    • algorithm

      c++的常用算法頭文件艇劫,如sort;qsort

  • 數(shù)組處理
    • memcpy

      數(shù)組a復(fù)制k個(gè)元素到數(shù)組b:memcpy(b,a,sizeof(int)*k);

      數(shù)組a全部復(fù)制到數(shù)組b:memcpy(b,a,sizeof(a));

    • memset

      數(shù)組a清0:memset(a,0,sizeof(a));

      這里注意一點(diǎn),memset對(duì)int數(shù)組賦初值時(shí)只能賦值0,其他數(shù)都不能賦值昂验,因?yàn)閙emset賦值的單位是字節(jié),而int是4個(gè)字節(jié)艾扮,所以你賦值0既琴,每字節(jié)都是0。所以合起來4個(gè)字節(jié)也是0泡嘴,但是賦值其他的數(shù)甫恩,4個(gè)字節(jié)合起來就不是原來的數(shù)了。(所以memset大多用來給char數(shù)組賦初值酌予,因?yàn)閏har是一個(gè)字節(jié))磺箕。

  • 數(shù)學(xué)計(jì)算
    • pow

      pow(double a,double b);
      頭文件:<math.h>
      功能:計(jì)算a的b次方

  • 字符處理
    • sprintf

      printf輸出到屏幕,fprintf輸出到文件抛虫,sprintf輸出到字符串
      sprintf(a,"%d%d%d",a,b,c);//a為字符串?dāng)?shù)組

    • tolower

      格式:int tolower(int c)或(char c)
      將大寫字符轉(zhuǎn)化為小寫松靡,非字母字符不做處理
      頭文件:ctype.h或stdlib.h或iostream或string(4個(gè)貌似都可以..)

    • strcmp

      int strcmp(const char *s1, const char *s2);
      【功能】:比較兩個(gè)字符串的大小
      【規(guī)則】:字符串大小的比較是以ASCII 碼表上的順序來決定,此順序亦為字符的值莱褒。strcmp()首先將s1第一個(gè)字符值減去s2 第一個(gè)字符值击困,若差值為0 則再繼續(xù)比較下個(gè)字符,若差值不為0 則將差值返回。例如字符串"Ac"和"ba"比較則會(huì)返回字符"A"(65)和'b'(98)的差值(-33)阅茶。
      【返回值】:若參數(shù)s1 和s2 字符串相同則返回0蛛枚。s1 若大于s2 則返回大于0 的值。s1 若小于s2 則返回小于0 的值脸哀。

      【注意1】:如果s1和s2長(zhǎng)度不相等且s1是s2的子串蹦浦,則s1<s2,即strcmp(s1,s2)<0

      【注意2】:另外撞蜂,這個(gè)函數(shù)在某些編譯器上只返回-1,0,1三個(gè)值盲镶,并不是規(guī)定的返回值。所以一般用 <0,>0,=0來判斷蝌诡。

    • string對(duì)象(c++)

      string是c++中的字符對(duì)象溉贿,頭文件<string>。處理數(shù)組比c語(yǔ)言要方便很多浦旱,有幾個(gè)常用的方法:

      1. erase(int a,int b):從下標(biāo)a起刪除b個(gè)字符
      2. find(string):查找string出現(xiàn)的首下標(biāo)宇色,找不到返回std::string::npos(判斷是否找到只能用s.find(str)==std::string::npos)
      3. c_str()將string對(duì)象轉(zhuǎn)化為c語(yǔ)言字符串。
      4. size()返回字符串大小
      5. substr(begin,len)截取字符串颁湖,從下標(biāo)為begin開始宣蠕,截取長(zhǎng)度為len的字符串,不加len直接截取到最后。
      6. replace(begin,len,str)從下標(biāo)begin開始甥捺,長(zhǎng)度為len的字符串替換為str
      7. insert(begin,len)從下標(biāo)begin開始抢蚀,插入長(zhǎng)度為len的字符串
      8. 取特定下標(biāo)的字符string s;char a = s[i];返回的是char類型。
    • isalnum

      判斷字符是否為字母或者數(shù)字

    • char/int轉(zhuǎn)string
      1. 將ascill碼轉(zhuǎn)string
      to_string(char(‘A’+3))//直接to_string會(huì)輸出“68”
      或者:
      char a镰禾;
      a = 'A'+3;
      to_string(a);
      或者char('A'+3)+""就直接轉(zhuǎn)化為string
      
    • string(char) 轉(zhuǎn)int
      1. char轉(zhuǎn)int
        atoi
          string s = "12";
          int a = atoi(s.c_str());
      
      1. string 轉(zhuǎn)int
        stoi
      int a = stoi(string a);
      
  • 算法
    • sort

      c++排序函數(shù)皿曲,在std下,時(shí)間復(fù)雜度nlogn

      第一個(gè)參數(shù)是要排序的區(qū)間首地址羡微,第二個(gè)參數(shù)是區(qū)間尾地址的下一地址谷饿。比如有一個(gè)數(shù)組int a[100],要對(duì)從a[0]到a[99]的元素進(jìn)行排序妈倔,只要寫sort(a,a+100)

      sort(begin,end,compare(默認(rèn)為升序));
      bool compare(int a, int b) { return a<b;////這是升序(誰(shuí)小誰(shuí)在前面)}

    • 二分查找

      說明:在一個(gè)前閉后開的區(qū)間里進(jìn)行二分查找博投。
      1.lower_bound(first,last,key)
      2.upper_bound(first,last,key)
      3.binary_search(first,last,key)
      其中如果尋找的value存在,那么lower_bound返回一個(gè)迭代器指向其中第一個(gè)這個(gè)元素盯蝴。upper_bound返回一個(gè)迭代器指向其中最后一個(gè)這個(gè)元素的下一個(gè)位置(明確點(diǎn)說就是返回在不破壞順序的情況下毅哗,可插入value的最后一個(gè)位置)。如果尋找的value不存在捧挺,那么lower_bound和upper_bound都返回“假設(shè)這樣的元素存在時(shí)應(yīng)該出現(xiàn)的位置”虑绵。(迭代器相當(dāng)于一個(gè)指針指向數(shù)組中的某個(gè)元素)
      binary_search試圖在已排序的[first,last)中尋找元素value,若存在就返回true闽烙,若不存在則返回false翅睛。

  • c++運(yùn)算符重載
    • 格式說明

      type operator sign (parameters);
      運(yùn)算符重載定義在類或結(jié)構(gòu)體內(nèi)声搁,只針對(duì)此類或結(jié)構(gòu)體的具體運(yùn)算。
      例:
      struct E{
      char name[101];
      int age;
      int score;
      E operator + (E b){
      b.age = age+b.age;
      return b;
      }
      }
      調(diào)用:
      struct a;struct b;struct c;
      1.c = a + b;
      2.c = a.operator+(b);

  • 輸入(關(guān)于輸入輸出的細(xì)節(jié)需看我寫的博客)
    • scanf

      tip1:scanf("%4d%3d",&a,&b)//輸入一個(gè)數(shù)取其前四位賦給a,后四位賦給b

      tip2:
      在輸入數(shù)值數(shù)據(jù)或字符串(%d或%s)時(shí)捕发,若格式控制串中沒有非格式字符作輸入數(shù)據(jù)之間的間隔則可用空格疏旨,TAB或回車作間隔。C編譯在碰到空格扎酷,TAB檐涝,回車或非法數(shù)據(jù)(如對(duì)“%d”輸入“12A”時(shí),A即為非法數(shù)據(jù))時(shí)即認(rèn)為該數(shù)據(jù)結(jié)束法挨。
      在輸入單個(gè)字符數(shù)據(jù)(%c)時(shí)谁榜,若格式控制串中無非格式字符,則認(rèn)為所有輸入的字符均為有效字符,這時(shí)輸入時(shí)無法用空格凡纳,TAB或回車做間隔窃植。
      例如:

      1. scanf("%c%c%c",&a,&b,&c);輸入d e f則把'd'賦予a,' ' 賦予b荐糜,'e'賦予c撕瞧。只有當(dāng)輸入為def時(shí),才能把'd'賦于a狞尔,'e'賦予b,'f'賦予c巩掺。
      2. 如果在格式控制中加入空格作為間隔偏序,如:
        scanf ("%c %c %c",&a,&b,&c);
        則輸入時(shí)各數(shù)據(jù)之間可加空格。
      3. 以%s輸入字符串時(shí)可以以空格tab或回車做結(jié)束胖替,如:
        char a[10],b[10];
        scanf ("%s%s",a,b);
        則輸入時(shí)各數(shù)據(jù)之間可加空格或回車研儒。

      tip3:
      scanf的格式控制部分分為三部分:1格式化說明符,2空白符独令,3非空白符

      1. 格式化說明符比如%s,%c;
      2. 空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符端朵,空白符可以是space,tab,newline等等,直到第一個(gè)非空白符出現(xiàn)為止燃箭。
      3. 一個(gè)非空白字符會(huì)使scanf()函數(shù)在讀入時(shí)剔除掉與這個(gè)非空白字符相同的字符冲呢。
    • getchar

      getchar函數(shù)的返回值是用戶輸入的字符的ASCII碼,如出錯(cuò)返回-1.當(dāng)程序調(diào)用getchar時(shí).程序就等著用戶按鍵.用戶輸入的字符被存放在鍵盤緩沖區(qū)中.直到用戶按回車為止(回車字符也放在緩沖區(qū)中).當(dāng)用戶鍵入回車之后招狸,getchar才開始從stdio流中每次讀入一個(gè)字符,且將用戶輸入的字符回顯到屏幕.如用戶在按回車之前輸入了不止一個(gè)字符敬拓,其他字符會(huì)保留在鍵盤緩存區(qū)中,等待后續(xù)getchar調(diào)用讀取.也就是說裙戏,后續(xù)的getchar調(diào)用不會(huì)等待用戶按鍵乘凸,而直接讀取緩沖區(qū)中的字符,直到緩沖區(qū)中的字符讀完為后累榜,才等待用戶按鍵营勤。
      注:回車符和空格都是字符,所以也會(huì)被getchar吸收,所以經(jīng)常用getchar吸收多余的回車符葛作。

    • gets

      gets(a) 是輸入一個(gè)字符串寿羞,存入a.以回車做為結(jié)束,但是不以空格結(jié)束进鸠,這是和scanf的不同.和scanf的相同點(diǎn)是 字符串接受結(jié)束后自動(dòng)加'\0'.

      例:
      #include <stdio.h> main() { char ch1[10],ch2[10],c1,c2; scanf("%s",ch1); c1=getchar(); gets(ch2); c2=getchar(); }
      依次鍵入asdfg回車稠曼,asdfg回車,則ch1="asdfg\0"客年,c1='\n'霞幅,ch2="asdfg\0",c2需再次輸入量瓜。
      scanf:當(dāng)遇到回車司恳,空格和tab鍵會(huì)自動(dòng)在字符串后面添加'\0',只讀取回車空格tab之前的字符绍傲。但是回車扔傅,空格和tab鍵仍會(huì)留在輸入的緩沖區(qū)中。
      gets:可接受包括回車符以及之前輸入的所有字符烫饼,并用'\0'替代 '\n'.回車鍵不會(huì)留在輸入緩沖區(qū)中猎塞,因?yàn)間ets會(huì)把回車一起讀入,并用'/0'替換杠纵。

    • cin

      這個(gè)是c++中的輸入荠耽,頭文件為<iostream>
      cin和scanf一樣,輸入的回車和空格可認(rèn)為停止輸入比藻,不會(huì)讀取铝量,但都會(huì)保留在緩沖區(qū)內(nèi),需要吸收银亲。而gets讀取空格慢叨,且只以回車為結(jié)束標(biāo)志。
      注意:cin比scanf耗時(shí)很多务蝠,所以許多比賽建議用scanf而不是cin

  • 輸出
    • puts

      1.puts()函數(shù)只用來輸出字符串(結(jié)尾必須有'\0').沒有格式控制拍谐,里面的參數(shù)可以直接是字符串或者是存放字符串的字符數(shù)組名。而printf()函數(shù)的輸出格式很多请梢,可以根據(jù)不同格式加轉(zhuǎn)義字符赠尾,達(dá)到格式化輸出。
      2.puts()函數(shù)的作用與語(yǔ)句printf("%s\n",s);的作用形同毅弧,即自動(dòng)在最后加上換行符气嫁。

    • cout

      cout輸出和c的輸出不太一樣,他是帶緩存的够坐,只有緩存滿時(shí)才輸出寸宵,利用endl就是直接輸出崖面,清空緩存。
      endl的作用:
      1. 將換行符寫入輸出流梯影,其中Unix/Linux換行符是\n巫员,Windows中是\r\n,MAC中是\r甲棍;
      2. 清空輸出緩沖區(qū)简识。

  • 宏定義
    • define
      1. 簡(jiǎn)單的宏定義#define N n*n
      2. 帶參數(shù)的宏定義#denfine n(x) x*x;
    • 常量
      1. int類型最大最小值:
        INT_MIN,INT_MAX//在頭文件limits.h中
  • STL
    • stack

      格式:stack<type> a
      1.頭文件<stack>
      2.方法:

      • pop()
        取出頭元素,無返回值
      • push(value)
        插入元素
      • top()
        返回棧頂元素值(注意與pop區(qū)別感猛,top是取值不出棧七扰,pop是出棧不取值)
      • empty()
    • queue

      格式:queue<type> a
      1.頭文件<queue>
      2.方法:

      • pop()
        取出頭元素,無返回值
      • push(value)
        插入元素
      • front()
        返回隊(duì)頭元素值(注意與pop區(qū)別陪白,front是取值不出隊(duì)列颈走,pop是出隊(duì)列不取值)
      • back()
        返回隊(duì)尾元素
      • empty()
    • vector

      格式:vector<type> a/a[N]
      1.頭文件<vector>

      2.功能:常用于表示圖的鄰接表,其功能上相當(dāng)于一個(gè)一維數(shù)組咱士。

      • 初始化一個(gè)vector
        vector<int> a = {1,2,3,5}
        vector<int> a(n,1) //初始化一個(gè)有n個(gè)元素的數(shù)組立由,每個(gè)位置值為1
      • 向vector添加一個(gè)vector
        vector<vector<int>> a
        a.push_back(vector<int>(3,1))//vector<int>(3,1)是一個(gè)包含三個(gè)元素的vector,元素值全為1
      • 排序
        sort(a.begin(),a.end())//默認(rèn)升序

      3.成員方法:

      • push_back(value)
        把元素插入末尾
      • size()
        返回元素的個(gè)數(shù)
      • clear()
        清空vector中的元素
      • back()
        取最后一個(gè)值 返回
      • pop_back()
        取出最后一個(gè)值,不返回
      • erase(iterator index)
        刪除index指向的元素序厉,如erase(a.begin()+2)//刪除第3個(gè)元素
    • set

      格式:set<type> s
      1.頭文件<set>
      2.功能:集合里面不允許出現(xiàn)重復(fù)的值
      3.成員方法:

      • insert(value)
      • second
        判斷插入是否成功锐膜,當(dāng)插入重復(fù)的元素時(shí)會(huì)返回false。代碼:if(s.insert(value).second==false) return false
    • map/unordered_map

      格式:
      1.頭文件:<map>/<unordered_map>
      2.特性:map是stl中的關(guān)聯(lián)容器弛房,他的元素是一對(duì)數(shù)據(jù)枣耀,而像set等是一個(gè)數(shù)據(jù)。map的鍵唯一庭再,multimap鍵可以不唯一,內(nèi)部用紅黑樹實(shí)現(xiàn)牺堰,所以是按二叉搜索樹嚴(yán)格排序的拄轻,查找效率達(dá)不到j(luò)ava中hash_map的O(1),為O(logn)。而unordered_map內(nèi)部是hash表實(shí)現(xiàn)的伟葫,查找效率可以達(dá)到O(1)恨搓。
      3.格式:map\unordered_map<key, value> m
      4.成員方法:

      • 插入
        m[2] = 212\\如果鍵值2已存在,則更新相應(yīng)的值
        m.insert({ 'd', 100 })
      • 判空
        empty()
      • 查找
        iterator find (key);\\如果找到則返回該迭代器筏养,否則返回end()
        if(m.find(key)!=m.end())
    • priority_queue

      格式:priority_queue<type> p
      1.頭文件<queue>
      2.功能:優(yōu)先隊(duì)列斧抱,出隊(duì)列不再是先進(jìn)先出,而是優(yōu)先級(jí)最高的先出渐溶。內(nèi)部原理是堆(大頂堆或小頂堆)
      3.成員方法:

      • push(value)
        把元素插入末尾
      • size()
        返回元素的個(gè)數(shù)
      • pop()
        隊(duì)首元素(優(yōu)先級(jí)最高)出隊(duì)列
      • top()
        返回隊(duì)尾元素(優(yōu)先級(jí)最低)
        注意1priority_queue<int>默認(rèn)是大頂堆辉浦,priority_queue<int,vector<int>,greater<int> >是建立一個(gè)小頂堆(多加兩個(gè)參數(shù))。另外茎辐,如果是結(jié)構(gòu)體類型宪郊,可以在結(jié)構(gòu)體中重載 '<' 號(hào)掂恕,重定義優(yōu)先級(jí)。類似sort弛槐,不過和sort的 '<' 號(hào)功能正好相反懊亡。看題1416代碼乎串。
        注意2top()返回的元素不能直接修改店枣。即類似s.top()--這種是錯(cuò)誤的。只能先賦值給其他對(duì)象再修改再存進(jìn)去叹誉。如q = s.top();q--;s.pop();s.push(q);這個(gè)規(guī)則也適合其他STL的top()函數(shù)
  • 一些方法
    • 給一個(gè)數(shù)組全賦值0的方法

      1.memset(..);
      2.int a[100] = {0};//這個(gè)較簡(jiǎn)便

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸯两,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桂对,更是在濱河造成了極大的恐慌甩卓,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕉斜,死亡現(xiàn)場(chǎng)離奇詭異逾柿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宅此,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門机错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人父腕,你說我怎么就攤上這事弱匪。” “怎么了璧亮?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵萧诫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我枝嘶,道長(zhǎng)帘饶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任群扶,我火速辦了婚禮及刻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竞阐。我一直安慰自己缴饭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布骆莹。 她就那樣靜靜地躺著颗搂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幕垦。 梳的紋絲不亂的頭發(fā)上峭火,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天毁习,我揣著相機(jī)與錄音,去河邊找鬼卖丸。 笑死纺且,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稍浆。 我是一名探鬼主播载碌,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼衅枫!你這毒婦竟也來了嫁艇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤弦撩,失蹤者是張志新(化名)和其女友劉穎步咪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體益楼,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猾漫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了感凤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悯周。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖陪竿,靈堂內(nèi)的尸體忽然破棺而出禽翼,到底是詐尸還是另有隱情,我是刑警寧澤族跛,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布闰挡,位于F島的核電站,受9級(jí)特大地震影響礁哄,放射性物質(zhì)發(fā)生泄漏解总。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一姐仅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刻盐,春花似錦掏膏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乙墙,卻和暖如春颖变,著一層夾襖步出監(jiān)牢的瞬間生均,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工腥刹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留马胧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓衔峰,卻偏偏與公主長(zhǎng)得像佩脊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垫卤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容