面向筆試C/C++編程:基礎(chǔ)

1. 基本框架

#include<bits/stdc++.h>
using namespace std;

int main(){
    return 0;
}

2. 輸入輸出

No. 類型 變量 輸出 輸入
1 整型 int n = 0; printf("%d\n",n); scanf("%d",&n);
2 單精度浮點(diǎn)型 float f = 0; printf("%f\n",f); scanf("%f",&f);
3 字符串 string s; cout << s << "\n"; cin >>s;
4 字符 char c; printf("%c",c); scanf("%c",&c)
5 長(zhǎng)整型 long long l; printf("%ldd",l); printf("%lld",&l);

變量名只能英文字母加下劃線

小數(shù)精確度處理:%.精確度f(wàn)

整數(shù)除法說(shuō)明
整數(shù)除以整數(shù)還是整數(shù)终蒂,如果結(jié)果需要是小數(shù)句葵,要乘以1.0。例如:
3/2結(jié)果為1,1.0*3/2結(jié)果為1.5争剿。

3. 字符串

  1. 字符串變量string s;
  2. 獲取字符串長(zhǎng)度s.size()
  3. 獲取字符串i位置字符s[i]
  4. 遍歷字符串
for(int i=0;i<s.size();++i){
    printf("%c",s[i]);
}
  1. i截取長(zhǎng)度為len字符串s.substr(i,len);
  2. i截取到字符串結(jié)束s.substr(i);
  3. 字符串字典序排序sort(s.begin(),s.end());
  4. 在字符串后添加n個(gè)字符c s.append(n,c);
  5. 字符串連接+,str3 = str1+str2
  6. 構(gòu)建一個(gè)n個(gè)字符c組成的字符串string(n,c)

4. 數(shù)組

  • 定長(zhǎng)數(shù)組:數(shù)組長(zhǎng)度已知庸诱,并且數(shù)組大小不能改變
  • 變長(zhǎng)數(shù)組:數(shù)組長(zhǎng)度未知,并且數(shù)組大小可以改變

4.1 一維數(shù)組

No. 操作 定長(zhǎng)數(shù)組 變長(zhǎng)數(shù)組
1 定義數(shù)組 int nums[n]; vector<int> nums;
2 訪問(wèn)下標(biāo)i元素 nums[i] nums[i]
3 存放數(shù)據(jù) nums[i] nums.push_back(數(shù)據(jù))
4 數(shù)據(jù)數(shù)量 n nums.size()
  • 遍歷向量
    for(int i=0;i<nums.size();++i){
        printf("%d\n",nums[i]);
    }
    

4.2 二維數(shù)組

No. 操作 定長(zhǎng)數(shù)組 變長(zhǎng)數(shù)組
1 定義數(shù)組 int table[n][m]; vector<vector<int> > table;
2 行數(shù) n table.size()
3 列數(shù) m table[i].size()
4 獲取第i行第j列數(shù)據(jù) table[i][j] table[i][j]
  • 向量存儲(chǔ)數(shù)據(jù)
      vector<vector<int> > table;
      vector<int> row1;
      row1.push_back(1);
      row1.push_back(3);
      row1.push_back(4);
      row1.push_back(5);
      row1.push_back(6);
      vector<int> row2;
      row2.push_back(2);
      row2.push_back(7);
      row2.push_back(10);
      vector<int> row3;
      row3.push_back(8);
      row3.push_back(9);
      table.push_back(row1);
      table.push_back(row2);
      table.push_back(row3);
    
  • 向量遍歷
      for(int i=0;i<table.size();++i){
          for(int j=0;j<table[i].size();++j){
              printf("%d ",table[i][j]);
          }
          printf("\n");
      }
    

5. 排序

  • 排序函數(shù)sort(開(kāi)始位置,結(jié)束位置)
  • 按照cmp方式排序sort(開(kāi)始位置,結(jié)束位置,cmp)

sort()默認(rèn)以字典序排列字符粗卜,以升序排列數(shù)字屋确。

  • 按照字典逆序排列字符串
#include <bits/stdc++.h>
using namespace std;

bool cmp(char a,char b) {
  return a > b;// 正確的順序
}

int main() {
   string s; // s[i]
   cin >> s;
   sort(s.begin(),s.end(),cmp);
   cout << s;
   return 0;
}
  • 按照降序排列數(shù)列
#include <bits/stdc++.h>
using namespace std;

bool cmp(int a,int b){
  return a > b;// 正確的順序
}

int main() {
   int n = 0;
   scanf("%d",&n);
   int nums[n];
   for(int i=0;i<n;++i){
     scanf("%d",&nums[i]);   
   }
   sort(nums,nums+n,cmp);
   for(int i=0;i<n;++i){
     printf("%d ",nums[i]);   
   }
   
   return 0;
}

6. 結(jié)構(gòu)體

把多個(gè)變量綁到一起的一個(gè)類型,可以把結(jié)構(gòu)體看成一個(gè)多個(gè)變量組成包。

struct 結(jié)構(gòu)體{
  變量...
};

例如:
定義結(jié)構(gòu)體

struct UserInfo{
  string name;
  int age;
  bool sex;
};

使用

UserInfo zhangsan;
zhangsan.name = "張三";
zhangsan.age = 31;
zhangsan.sex = true;

結(jié)構(gòu)體數(shù)組

UserInfo users[n];
users[i].name
users[i].age
users[i].sex

7. 查找

  • 排序函數(shù)find(開(kāi)始位置,結(jié)束位置,查找值)
    如果找到了攻臀,返回查找值位置焕数,反之,返回結(jié)束位置刨啸。

8. 集合set

set<類型> 集合名
插入數(shù)據(jù)集合名.insert(數(shù)據(jù));
刪除數(shù)據(jù)集合名.erase(數(shù)據(jù));
set里面沒(méi)有重復(fù)的值堡赔,不能使用[下標(biāo)]訪問(wèn)。
集合里面存放數(shù)據(jù)數(shù)目集合名.size()

set<string> resset;
resset.insert("00");
resset.insert("10");
resset.insert("11");
resset.insert("01");
resset.insert("00");
resset.insert("01");
resset.insert("00");
resset.insert("00");
resset.insert("01");
resset.insert("00");
resset.insert("01");
// 集合不能使用resset[0];
for(string s:resset){
    cout << s << '\n';
}

數(shù)據(jù)不允許重復(fù)设联,使用集合set<>

9. 基于范圍for循環(huán)

int nums[4];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
// 基于下標(biāo)的for循環(huán)
for(int i=0;i<4;++i){
    printf("%d\n",nums[i]);
}
// 基于范圍的for循環(huán)
for(int n:nums){
    // n相當(dāng)于nums[i]
    printf("%d\n",n);
}

10. 指針

指針是用來(lái)存放變量的地址善已。使用類型 *定義指針,
*指針變量使用指針离例。
如果指針類型是結(jié)構(gòu)體换团,使用->訪問(wèn)結(jié)構(gòu)體的變量。

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a = 0;
    printf("%d\n",a);
    int *p = &a;
    *p = 10;
    printf("%d\n",a);
}

11. 鏈表

數(shù)組類型 數(shù)組名[n]

#include <bits/stdc++.h>
using namespace std;
// 鏈表節(jié)點(diǎn) = 數(shù)據(jù) + 索引(指針) 
struct Node{
  int data;
  Node *p;
};
// 10 7 5 3 2 1
int main() {
    // 構(gòu)造鏈表
    Node head; // 頭節(jié)點(diǎn)(鏈表的首節(jié)點(diǎn))
    head.data = 10;
    
    Node n1;
    n1.data = 7;
    head.p = &n1;
    
    Node n2;
    n2.data = 5;
    n1.p = &n2;
    
    Node n3;
    n3.data = 3;
    n2.p = &n3;
    
    Node n4;
    n4.data = 2;
    n3.p = &n4;
    
    Node n5;
    n5.data = 1;
    n4.p = &n5;
    n5.p = NULL; // n5后面沒(méi)有節(jié)點(diǎn)了NULL宫蛆。
    
    // 遍歷鏈表
    Node* pNode = &root;
    while(pNode != NULL){
        printf("%d ",pNode->data);
        pNode = pNode->p;
    }
}

先進(jìn)先出LIFO
使用vector<>模擬棧艘包。

    vector<char> test;
    test.push_back('/');
    test.push_back('a');
    test.push_back('b');
    test.push_back('c');
    test.pop_back();
    test.push_back('d');
    test.pop_back();
    test.pop_back();
    for(int i=0;i<test.size();++i){
        cout << test[i] << "\n";
    }

棧的主要用途是,解決括弧匹配問(wèn)題耀盗。

#include <bits/stdc++.h>
using namespace std;
bool check(string s){
    vector<char> stack;
    for(int i=0;i<s.size();++i){
        if(s[i] == '['){
            stack.push_back('[');
        }else if(s[i] == ']'){
            if(stack.empty()){// 如果前面沒(méi)有做左括號(hào)想虎,不匹配
                return false;
            }
            stack.pop_back();
        }
    }
    return stack.empty();
}
int main(){
    string s = "[[[]]][][][][][][][]";
    
    printf("%d\n",check(s));
    
    return 0;
}

特殊函數(shù)

累加函數(shù)accumulate(first,last,init),累加序列[first,last)區(qū)間中的數(shù)據(jù)叛拷,init是累加初始值

樹(shù)

struct Node{// 雙親孩子表示法
    vector<int> children;
};

void DFS(int root,Node* nodes){// 深度優(yōu)先遍歷
    stack<int> s;
    s.push(root);
    while(!s.empty()){
        int now = s.top();
        s.pop();
        printf("%d ",now); // 出棧訪問(wèn)
        vector<int> children = nodes[now].children;
        for(int i=children.size()-1;i>=0;--i){
            int post = children[i];
            s.push(post);
        }
    }
}

void BFS(int root,Node* nodes){// 廣度優(yōu)先遍歷
    queue<int> s;
    s.push(root);
    printf("%d ",root); // 入隊(duì)訪問(wèn)
    while(!s.empty()){
        int now = s.front();
        s.pop();
        vector<int> children = nodes[now].children;
        for(int i= 0;i<children.size();++i){
            int post = children[i];
            s.push(post);
            printf("%d ",post); // 入隊(duì)訪問(wèn)
        }
    }
}

深度遍歷遞歸寫法

void DFS2(int root,Node* nodes){// 深度優(yōu)先遍歷
    printf("%d ",root); // 出棧訪問(wèn)
    vector<int> children = nodes[root].children;
    for(int i= 0;i<children.size();++i){
        int post = children[i];
        DFS2(post,nodes);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舌厨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忿薇,更是在濱河造成了極大的恐慌裙椭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煌恢,死亡現(xiàn)場(chǎng)離奇詭異骇陈,居然都是意外死亡震庭,警方通過(guò)查閱死者的電腦和手機(jī)瑰抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)器联,“玉大人二汛,你說(shuō)我怎么就攤上這事〔ν兀” “怎么了肴颊?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)渣磷。 經(jīng)常有香客問(wèn)我婿着,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任竟宋,我火速辦了婚禮提完,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丘侠。我一直安慰自己徒欣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布蜗字。 她就那樣靜靜地躺著打肝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挪捕。 梳的紋絲不亂的頭發(fā)上粗梭,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音担神,去河邊找鬼楼吃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妄讯,可吹牛的內(nèi)容都是我干的孩锡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亥贸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼躬窜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起炕置,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荣挨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后朴摊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體默垄,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年甚纲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了口锭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡介杆,死狀恐怖鹃操,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情春哨,我是刑警寧澤荆隘,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站赴背,受9級(jí)特大地震影響椰拒,放射性物質(zhì)發(fā)生泄漏晶渠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一燃观、第九天 我趴在偏房一處隱蔽的房頂上張望乱陡。 院中可真熱鬧,春花似錦仪壮、人聲如沸憨颠。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爽彤。三九已至,卻和暖如春缚陷,著一層夾襖步出監(jiān)牢的瞬間适篙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工箫爷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚷节,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓虎锚,卻偏偏與公主長(zhǎng)得像硫痰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窜护,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型效斑。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)柱徙; ...
    朱森閱讀 3,430評(píng)論 3 44
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,763評(píng)論 0 38
  • 2.變量和基本類型 3.字符串缓屠、向量和數(shù)組 4.表達(dá)式 5.語(yǔ)句 2.變量和基本類型 c++的算術(shù)類型: 一個(gè)ch...
    暮落晴空閱讀 647評(píng)論 0 0
  • 在“你拍我畫”的活動(dòng)中看到這張圖,覺(jué)得很好看护侮,就保存了下來(lái)敌完。 先用普通的鉛筆打底稿: 好多的葉子啊,畫的我滿眼星星...
    靜靜兒畫閱讀 483評(píng)論 4 8
  • 致我和西瓜姐最親愛(ài)的老爸: 這是第一次寫信給你,有些話很想說(shuō)給你聽(tīng)凳忙,卻又更像講給自己业踏。 提筆突然不知從何說(shuō)起禽炬。也沒(méi)...
    路小山閱讀 281評(píng)論 1 2