本單元語法速查表
| 語法 | 用途 | 範例/備註 |
|---|---|---|
int *p = &n; |
宣告指標,存入變數 n 的位置 | * 跟著變數名:int *a, *b; |
&n |
取得變數的記憶體位置(取址) | |
*p |
取出指標指向位置的值(取值) | *(a + i) 就是 a[i];*p + 2 少了括號意思全變 |
void f(int *a) |
參數收「位置」,函式裡用 *a 動到外面的變數 |
呼叫時寫 f(&x);C 語言唯一的做法 |
void f(int a[], int n) |
陣列參數=指標,長度要自己另外傳 | 等同 void f(int *a, int n) |
sort(a, a + n) |
排序 a[0] ~ a[n-1](由小到大) |
#include <algorithm>;左閉右開 |
sort(a + 1, a + n + 1) |
1-base 陣列排序 | 兩端都要 +1 |
sort(v.begin(), v.end()) |
排序整個 vector/string | 10.5 的 begin/end |
sort(a, a + n, greater()) |
由大到小 | 有 <algorithm> 就夠;舊標準寫 greater<int>(),型態要填對 |
sort(v.rbegin(), v.rend()) |
由大到小的另一種寫法 | 只有容器有 rbegin/rend,原生陣列沒有 |
sort(a, a + n, cmp) |
用自訂規則排序 | bool cmp(x, y)=「x 是否必在 y 前」 |
bool cmp(int x, int y) { return x > y; } |
比較函式範本(由大到小) | 相等必回傳 false:用 <、> 別用 <= |
stable_sort(v.begin(), v.end(), cmp) |
穩定排序 | 相等元素保持原本相對順序 |
cnt[x]++; 再依序輸出 |
計數排序 | 值域小的非負整數專用;O(n + V) |