Lambda 匿名函式
[只讀列表](引數列表) {函式體}
- 例如:
sort(a + 1, a + n, [](const Data &x, const Data &y) {
return x.val < y.val;
}
const int k = 5;
auto calc = [k](const int &x) {return x * k;}
template 模板
在 struct/namespace/函式 前加入 template <typename T, ...>
可用型別 T
表示“任意一種型別”。
- 例如:
template<typename T>
void abs(T x) {
return (x<0) ? -x : x;
}
int x1 = -1;
float x2 = -0.5;
cout << abs(x1) << " " << abs(x2) << endl;
template<typename T, int N>
struct Stack {
T a[N];
int tot;
void pop() {tot--;}
T& top() {return a[tot];}
void push(const T &x) {a[++tot] = x;}
};
Stack<int, 100> S1;
Stack<float, 10> S2;
S1.push(1);
S2.push(0.5);
S1.top()++;
cout << S1.top() << " " << S2.top() << endl;
傳遞函式
-
using
在 C++11 中有著“重新命名、代替”的用處。 -
利用
using
歸納一個函式並作為引數傳遞。
用法:using Func = int (&)(int, int)
- 例如:
int my_add(int x, int y) {return x+y;}
int my_xor(int x, int y) {return x^y;}
using Func = int (&)(int, int);
int sum(int *a, int n, Func op) {
int ret = 0;
for (int i=0; i<n; i++)
ret = op(ret, a[i]);
return ret;
}
const int N = 4;
int a[N] = {1,2,3,4};
cout << sum(a, N, my_add) << " " << sum(a, N, my_xor) << endl;
除錯
assert
用法:assert(條件語句)
。當條件成立時什麼也不做,不成立時報錯,返回該 assert 語句的行標號,並退出程式。
- 例如:
const int N = 5;
int a[N] = {3, 2, 1, 0, -1};
for (int i=0; i<N; i++)
assert(a[i]>=0);
當 \(i=4\) 時 assert
會報錯。
exit
用法:exit(返回值)
。結束程式並返回。