爲了備戰NOIP2016複習語法和stl庫一上午擼了15頁

比較重要: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.  ASCIIip

 

 

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 輸入

fe                      用於輸入實數

s                         用於輸入字符串

c                         用於輸入字符串

x o                  分別是十六進制,八進制輸入

<3>printf(沒有&地址符)

printf(%d,a);

di(u)                       用於int(無符號)輸出

xo                        用於十六進制、八進制輸出

cs                         用於單字符、字符串輸出

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);en次方

log(n);logn

log10();相似以10爲底

pow(xy);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()計算字符串長度

相關文章
相關標籤/搜索