比較重要:ios
1. 位運算符:c++
<1>&(按位與):當兩個數的二進制位同爲1的時候,結果位才爲1.不然爲0.(簡記:and同一爲一,不一樣一爲0.)git
<2>|(按位或):當兩個數的二進制有一個爲1的時候,結果位爲1.不然爲0.(簡記:or只有有一就是一).數組
<3>^(按位異或):當兩個數二進制位數不相同時,結果位才爲1.不然爲0.(簡記:xor不一樣纔是1相同才爲0).函數
<4>~(取反):二進制的位相反,當爲1時爲0,爲0時爲1.(簡記:1爲0,0爲1)。測試
<5>」<<」(左移):把左面移動幾位,右面用0補上幾位。EX:<<4爲向左移4位.(至關於稱2,速度快)。spa
<6>」>>」(右移):跟<5>相反至關於除2.指針
2. 變量範圍隊列
3. ASCII表ip
4. 轉義字符
5. 強制轉換
老式: (類型名)(表達式);
新式: static_case<類型名>(表達式);
不一樣:反正兩個差很少,老式出錯率大了點而已。比賽推薦老式。新式寫起來費時間。
6.輸入輸出
說實話我寫這個是徹底爲了學點c的,熟悉一下。畢竟scanf比cin流輸入快。還有另一種比較開掛的讀入。代碼以下:
<1>cin>>變量;
cout<<變量<<endl;
<2>scanf(「%d %d」,&a,&b);
輸入a,b值。
scanf(「%4d」,&a);
輸入a的值的位數是輸入的前4個。
scanf(「%s」,st);
輸入st字符串,遇到空格結束。
scanf(「%*d」,a);
輸入的不給變量a;
scanf(「%d,%d,%d」&a,&b,&c);
輸入abc的時候要輸入逗號。
d, i u 用於int類型、無符號輸入(u)
ld 用於long int 輸入
hd 用於 short 輸入
f,e 用於輸入實數
s 用於輸入字符串
c 用於輸入字符串
x o 分別是十六進制,八進制輸入
<3>printf(沒有&地址符)
printf(「%d」,a);
d,i(u) 用於int(無符號)輸出
x,o 用於十六進制、八進制輸出
c,s 用於單字符、字符串輸出
f 用於小數輸出單雙精度浮點數
ld 用於longlong類型輸出
e 用指數輸出
g 自動選%f%e中寬度小的輸出
%md、%-md、%0md 輸出m位、左對齊輸出m位、位數不足用0補
(%mld相似啦就是輸出longlong類型用法中間加個l好了)
%m.nf、%-m.nf 輸出浮點數共有m位(含小數),n位小數,’-’用法和樓上同樣
ms 指定m位寬度輸出字符串s
m.ns 輸出m位字符長度,其中字符最多佔n位
(相似也有-ms、-m.ns用法跟樓上的樓上同樣啦~)
<4>開掛的讀入讀寫(裏面三種讀入讀寫時間cin>scanf>scan())
#include<iostream>
#include<cstdio>
using namespace std;
int scan()
{
long long res = 0, ch, flag = 0;
if((ch = getchar()) == '-')
flag = 1;
else if(ch >= '0' && ch <= '9')
res = ch - '0';
while((ch = getchar()) >= '0' && ch <= '9' )
res = res * 10 + ch - '0';
return flag ? -res : res;
}
int main ()
{
int x,y, z;
x=scan();
cin>>y;
scanf("%d",&z);
cout<<x<<" "<<y<<" ";
printf("%d",z);
return 0;
}
<5>總結:cin流的頭文件是<iostream>,它是屬於c++範疇的,c++專用。scanf、printf是<cstdio>,c語言的。時間相比看<4>。競賽用scanf多,反正我日常用cin。沒錯鄙人就是這麼特殊。(其實就是懶,固然競賽我也會考慮用的)。
6. 文件輸入輸出
一個特別重要的,由於若是你不會這個,那麼你在牛逼,也是0分。重點掌握。
<1>freopen:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
freopen("xx.in","r",stdin);
freopen("xx.out","w",stdout);
//add your 代碼;
fclose(stdin)
fclose(stdout);
}
平時用cena測評基本都用這種文件輸入輸出。可是有些比賽不許用重定向。因此介紹下一種。
<2>fstream:
#include<iostream>
#include<fstream>
using namespace std;
int temp;
int main()
{
ifstream fin("xx.in");
ofstream fout("xx.out");
fin>>temp;
fout<<temp<<endl;
fin.close();
fout.close();
}
<3>這兩種第一種用起來比較舒服,由於寫上這一部分代碼,任何輸入輸出都按正常的寫代碼。而第二種屬於c++的反正寫起來比較噁心。若是也是想往常同樣寫代碼。那就用#define fin cin #define fout cout 放在頭文件下面幾行行了。不過不能用scanf等輸入畢竟這個輸入c++輸入流裏面的。
7. 結構體
這個東西能夠這麼理解,它就是一個虛擬世界的物品。由於一個物品例如正方形,在現實世界中是一個有長度,有寬度,有體積,有面積的物體。而在計算機中如何表示呢,你不可能那個實體塞進去。塞進去就能夠上天了。咱們就能夠把正方形的長寬高體積面積變成數輸進去。而後儲存在一個東西里。這個東西就叫結構體。代碼:
#include<iostream>
using namespace std;
struct data
{
int s; //定義面積
int l; //定義長度
int w; //定義寬度
int h; //定義高度
int v; //定義體積
}cube;
int main()
{
cin>>cube.s>>cube.l>>cube.w>>cube.h>>cube.v;
cout<<cube.s<<" "<<cube.l<<" "<<cube.w<<" "<<cube.h<<" "<<cube.v<<endl;
return 0;
}
調用正方體的數據就相似定義。若是要防止某些數據改變就能夠用const 類型名 變量名 ;來定義。若是要屢次運用到這個結構體能夠用data 變量1,變量2;等方式定義。Struct結構體跟c++類相相似。競賽用的比較常見。應重點掌握。
8. c++STL函數
一個特別好用的函數庫。多掌握幾個,寫代碼跟過家家是的。應該注意,stl函數很耗時間因此謹慎使用。曾經作過洛谷的快排模板的一道題,用sort和本身寫快排做對比,快排最慢254ms而sort( )最慢568ms。誰快誰慢本身心理有數好了。不要覺得差314ms不多,告訴你有時候你慢1ms,就給你tle。仍是能節省就節省。
<1>algorithm
max()、min() 返回兩個值中最大、最小值
next_permutation() 把數組進行下一次的全排列
prev_permutation() 把數組進行上一次的全排列
patition() 輸入的函數把計算爲true的值放在false前面
sort() 從小到大排列一個數組的數
unique() 清除數組裏所有重複的數(不是真正的刪除,不信能夠本身動手寫一下)
unique()使用代碼:
#include<iostream>
#include<algorithm>
using namespace std;
int a[1001],i;
int main()
{ while(cin>>a[i]) i++;
int m=unique(a,a+i)-a;
for(int j=0;j<=m;j++)
cout<<a[j]<<" ";
return 0;}
sort()+本身寫的cmp()實現從大到小排列:
#include<iostream>
#include<algorithm>
using namespace std;
int a[1001],i;
int cmp(const int &a,const int &b) {return a>b;}
int main()
{while(cin>>a[i]) i++;
sort(a,a+i,cmp);
for(int j=0;j<i;j++)
cout<<a[j]<<" ";
return 0;}
<2>string
string s1; 定義一個string類型的字符串
string s1(s2); 定義s1內容爲s2
string s1(「dingyi」); 定義s1內容爲dingyi
string s1(n,’c’); 定義有n個c字符爲內容
cin>>s1會忽略字符前的空格等但再次讀到空格就會中止,可記爲讀單詞。
getline(cin,s1); 這個輸入什麼讀什麼,即讀句子。
s3=s1+「add」+s2; s3內容爲s1加上add加上s2內容
s1.empty() 若是s1無字符返回true
s1.insert(n,s2) 在下標是n的元素前面插入s2
s1.substr(n,len) 返回一個字符串,包含從下標n開始len個字符
s1.erase(n,len) 刪除從下標爲n開始len個字符
s1.replace(n,len,s2) 從下標爲n開始len個字符用s2代替,若是s2長度大於代替長度,那麼後面內容後移它們的差值
s1.find(s2,n) 從下標n開始從前查找s2的出現的第一次位置,沒找到返回string::nops
s1.rfind(s2,n) 與樓上相似不過是從後開始查找,返回值也是nops
s1. find_ frist_of (s2,n) 從n下標開始,開始正向查找s2中的某一個字符,若是查到返回第一次出現的值,不然返回sting::nops
s1. find _ last_of (s2,n)與樓上同樣。區別爲逆向查找
s1. find_ frist_not_of (s2,n)從n下標開始,正向查找s2中的某一字符,只要出現返回string::nops
s1. find_ last_not_of (s2,n)跟樓上同樣,逆向查找。
<3>FIFO隊列和優先隊列
queue<類型名>變量名;
priority_queue<類型名>變量名; 定義優先隊列
q.emqty() 若是隊列爲空返回true不然返回false
q.size() 返回隊列個數
q.pop() 刪除隊首元素,不返回值
q.front() 返回隊首值,不刪除值
q.back() 返回隊尾的值,不刪除值
q.top() 優先隊列最高優先值
q.push() 在隊尾加入一個新元素
<4>vector
vector<類型名>變量名;
v.back() // 傳回最後一個數據,不檢查這個數據是否存在。
v.begin() // 傳回迭代器中的第一個數據地址。
v.capacity() // 返回容器中數據個數。
v.clear() // 移除容器中全部數據。
v.empty() // 判斷容器是否爲空。
v.end() // 指向迭代器中末端元素的下一個,指向一個不存在元素。
v.erase(pos) // 刪除pos位置的數據,傳回下一個數據的位置。
v.erase(beg,end) //刪除[beg,end)區間的數據,傳回下一個數據的位置。
v.front() // 傳回第一個數據。
v.pop_back() // 刪除最後一個數據。
v.push_back(elem) // 在尾部加入一個數據。
v.resize(num) // 從新指定隊列的長度。
v.reserve() // 保留適當的容量。
v.size() // 返回容器中實際數據的個數。
v1.swap(v2) swap(v1,v2) // 將v1和v2元素互換。同上操做。
<5>map容器
map<類型1,類型2>變量名;
ma.begin()返回map第一個元素的指針
ma.end()返回最後一個元素的指針
ma.size()返回map的元素個數
ma.count(n)若是n存在map中返回存在的個數,沒有返回0;
ma.clean()清空map
ma.lower_bound()返回鍵值大於等於給定元素的第一個位置
<6>cmath
abs();整數絕對值
ceil();向上取整
fabs();浮點數絕對值
floor();向下取整
exp(n);e的n次方
log(n);logn
log10();相似以10爲底
pow(x,y);x的y次方
sqrt(x);x的開方
cos(); sin();tan(); 三角函數值
cosh();sinh();tanh();雙曲線三角函數值
acos();asin();atan();反三角函數值
<7> iomanip
setprecision(x)輸出x位(fixed前面必須加這個)
setw(n)輸出的字符寬度是n位
setfill(ch)當字符寬度大於輸出寬度用ch填寫
<8>iostream
fixed用固定的輸出浮點數
scientific 用科學計數法輸出
defaulfloat 恢復默認的浮點數表示方法
left左對齊
right右對齊
internal填充字符在整數內部或者浮點數內部
<9>locale 或cctype
isupper()測試是否爲大寫字母
islower() 測試是否爲小寫字母
isalpha() 測試是否爲大小字母
isdigit() 測試是否爲0~9數字
isxdigit() 測試是否爲十進制,八進制,十六進制數字
isalnum() 測試是否爲字母或者數字
isspace() 測試是否爲空格啥的。。。
iscntrl() 測試是否爲控制符
isprint() 測試是否爲打印字符
isgraph() 測試是否爲圖形字符
ispunct() 測試是否爲標點包括空格
tolower()大寫轉小寫
toupper()小寫轉大寫
<10>cstring
memeset(數組名,數值n,sizeof(數組名) );把數組全部元素換成數值n
strlwr()大寫轉小寫;
strupr()小寫轉大寫
strlen()計算字符串長度