yungyao
其實不太重要
反正就是你用來寫code的程式
其實我平常使用的是 VS Code 或 Vim
不過對新手來說 Codeblocks 是最簡單好用的
選擇 Binary Release 然後按照指示安裝就好
#include <iostream>
using namespace std;
int main(){
//Write your code here.
return 0;
}
cin >> a >> b;
cout << a << b;
型別 | 範圍 | 大概範圍 |
int | -2147483648 ~ 2147483647 | -2e9 ~ 2e9 |
long long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | -9e18 ~ 9e18 |
float | 3.4e±38 | 精度過低 |
double | 1.7e±308 | 都用這個 |
char | 0 ~ 255 | 常用字元 |
bool | 0 ~ 1 | 0/1 |
選擇結構
if (/*條件成立*/){
//do ...
}
else if (/*否則這個條件成立*/){
//do ...
}
else{ //上面的條件都不成立
//do ...
}
while (/*為真的話就跑*/){
//do something
}
for (/*第一次進迴圈時執行*/;/*跟while迴圈一樣*/;/*迴圈每執行完一次就執行一次這邊*/){
//do something
}
for (int i=0;i<10;++i){
cout << i << ' ';
}
int a[10];
for (int i=0;i<10;++i){
cin >> a[i];
}
int b[10][10];
for (int i=0;i<10;++i){
for (int j=0;j<10;++j){
cin >> b[i][j];
}
}
從第一個數開始,如果下一個數比目前的小,就swap
並對下一個數執行一樣的事
那最大的數一定會在最後
這樣執行 \(n\) 次,陣列就會被排序好
int add(int a, int b){//回傳型別和傳入值
//執行內容
int c = a + b;
return c;
}
型別可以是 void,表示沒有回傳值
void swap(int &a, int &b){ //用 & 表示該變數是傳參考
int temp = a;
a = b;
b = temp;
}
void printNum(int n){
cout << n << ' ';
if (n > 1) printNum(n-1);
}
將一個函式重複定義
只要傳入的型態不同,就能自動判斷使用哪個型態
int add(int a, int b){
return a + b;
}
int add(int a, int b, int c){
return a + b + c;
}
之後才會遇到的
還有黑魔法 pbds
可以把一段陣列排序好
不加 compare function 預設會是由小到大排
sort (*begin, *end, compare_function/*optional*/);
sort (a, a+n);
可以把 \(a[0], a[1], ..., a[n-1]\) 排序好
cmp function在順序正確時回答true
bool cmp(int a, int b){
return a > b;
}
int main(){
int arr[100];
sort(arr, arr+100, cmp);
}
也可以這樣表示
int arr[100];
sort(arr, arr+100, [](int a, int b){return a > b;});
int a = max(1, 2);
int b = min(1, 2);
int arr[100];
fill(arr, arr+100, -1)
priority_queue <int> pq;
priority_queue <int, vector<int>, greater<int>> min_pq;
pq.push(1);
pq.push(2);
cout << pq.top() << '\n'; //2
pq.pop();
cout << pq.top() << '\n'; //1
pair <int, int> p = make_pair(1, 2);
cout << p.first << ' ' << p.second << '\n'; //1 2
p.second = 3;
cout << p.first << ' ' << p.second << '\n'; //1 3
set <int> st;
st.insert(1);
st.insert(2);
st.erase(2);
if (st.find(x) != st.end()) cout << "x is in set.\n";
cout << *st.lower_bound(x) << '\n'; //binary search for x
map <int, int> mp;
mp[1] = 2;
mp[2] = 3;
mp[1] += mp[2];
cout << mp[1] << ' ' << mp[2] << ' ' << mp[3] << '\n';//5 2 0
cout << mp.lower_bound(0)->first; //1
自定義的型態
struct data{
int a, b;
string name;
int index;
}a, b;
data arr[100];
a.a = 1;
a.name = "1234567890";
Text
struct data{
int a, b, c;
data(int x, int y){
a = x;
b = y;
c = x + y;
}
data(int a, int b, int c): a(a), b(b), c(c){}
};
struct point{
int x, y;
int dis(point a){
return (x - a.x) * (x - a.x) + (y - a.y) * (y - a.y);
}
};
int *a, *b;
long long *c;
對於一個擁有子型態的指標x
可以用 x->y 取代 (*x).y
int x;
int *p;
struct data{
int a, b;
}d, *pd;
p = &x;
*p = 1;
pd = &d;
pd->a = (*pd).b;
struct LLNode{
LLNode *pre, *nex;
int val;
};
pair <int, int> operator+(pair <int, int> a, pair <int, int> b){
return make_pair(a.first + b.first, a.second + b.second);
}