-
頭文件
- stdio.h
c語(yǔ)言的標(biāo)準(zhǔn)輸入輸出竞思,常用
printf;scanf
- iostream
c++語(yǔ)言的標(biāo)準(zhǔn)輸入輸出,重用
cin;cout
- algorithm
c++的常用算法頭文件艇劫,如
sort;qsort
- stdio.h
-
數(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次方
- pow
-
字符處理
- 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è)常用的方法:-
erase(int a,int b)
:從下標(biāo)a起刪除b個(gè)字符 -
find(string)
:查找string出現(xiàn)的首下標(biāo)宇色,找不到返回std::string::npos(判斷是否找到只能用s.find(str)==std::string::npos) -
c_str()
將string對(duì)象轉(zhuǎn)化為c語(yǔ)言字符串。 -
size()
返回字符串大小 -
substr(begin,len)
截取字符串颁湖,從下標(biāo)為begin開始宣蠕,截取長(zhǎng)度為len的字符串,不加len直接截取到最后。 -
replace(begin,len,str)
從下標(biāo)begin開始甥捺,長(zhǎng)度為len的字符串替換為str -
insert(begin,len)
從下標(biāo)begin開始抢蚀,插入長(zhǎng)度為len的字符串 - 取特定下標(biāo)的字符
string s;char a = s[i];
返回的是char類型。
-
- isalnum
判斷字符是否為字母或者數(shù)字
- char/int轉(zhuǎn)string
- 將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
- char轉(zhuǎn)int
atoi
string s = "12"; int a = atoi(s.c_str());
- string 轉(zhuǎn)int
stoi
int a = stoi(string a);
- char轉(zhuǎn)int
- sprintf
-
算法
- 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翅睛。
- sort
-
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,后四位賦給btip2:
在輸入數(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或回車做間隔窃植。
例如:-
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巩掺。 - 如果在格式控制中加入空格作為間隔偏序,如:
scanf ("%c %c %c",&a,&b,&c);
則輸入時(shí)各數(shù)據(jù)之間可加空格。 - 以%s輸入字符串時(shí)可以以空格tab或回車做結(jié)束胖替,如:
char a[10],b[10];
scanf ("%s%s",a,b);
則輸入時(shí)各數(shù)據(jù)之間可加空格或回車研儒。
tip3:
scanf的格式控制部分分為三部分:1格式化說明符,2空白符独令,3非空白符- 格式化說明符比如%s,%c;
- 空白字符會(huì)使scanf()函數(shù)在讀操作中略去輸入中的一個(gè)或多個(gè)空白字符端朵,空白符可以是space,tab,newline等等,直到第一個(gè)非空白符出現(xiàn)為止燃箭。
- 一個(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ū)简识。
- puts
-
宏定義
- define
- 簡(jiǎn)單的宏定義
#define N n*n
- 帶參數(shù)的宏定義
#denfine n(x) x*x;
- 簡(jiǎn)單的宏定義
- 常量
- int類型最大最小值:
INT_MIN,INT_MAX
//在頭文件limits.h中
- int類型最大最小值:
- define
-
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è)元素
- 初始化一個(gè)vector
- 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í)最低)
注意1:priority_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代碼乎串。
注意2:top()返回的元素不能直接修改店枣。即類似s.top()--
這種是錯(cuò)誤的。只能先賦值給其他對(duì)象再修改再存進(jìn)去叹誉。如q = s.top();q--;s.pop();s.push(q);
這個(gè)規(guī)則也適合其他STL的top()函數(shù)
-
- stack
-
一些方法
- 給一個(gè)數(shù)組全賦值0的方法
1.memset(..);
2.int a[100] = {0};//這個(gè)較簡(jiǎn)便
- 給一個(gè)數(shù)組全賦值0的方法