unordered_map 把pair作为key
class hash_pair
{
public:
size_t operator()(const pair<int, int>& p) const
{
auto p1 = hash<int>()(p.first);
auto p2 = hash<int>()(p.second);
return p1^p2;
}
};
unordered_map<pair<int, int>, bool, hash_pair> visited;
使用逻辑运算符替代判断语句
- A && B, 如果A为假, B将不会执行, 如果A为真, B才会执行
- A || B , 如果A为真, B将不会执行, 如果A为假, B才会执行
int f(int n)
{
n && (n += f(n-1));
return n;
}
默认参数
默认参数之后的所有参数都必须是默认参数
(默认参数必须放在最后)- 不要重载一个带默认参数的函数
class Test
{
public:
int func(int a)
{
return a;
}
int func(int a, int b = 1)
{
return a + b;
}
} ;
Test().func(1);
指针常量
C++中引用的本质就是指针常量, 因此指针常量必须要初始化, 就好像引用必须要初始化.
最大公约数, 最小公倍数
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
if (a < b)
{
swap(a, b);
}
if (b == 0)
return a;
return gcd(b, a%b);
}
int gcm(int a, int b)
{
int gcd_val = gcd(a,b);
return a * b / gcd_val;
}
int ngcd(int arr[], int n)
{
if(n == 0) return arr[n];
return gcd(arr[n-1], ngcd(arr, n-1));
}
int ngcm(int arr[], int n)
{
if (n == 0) return arr[0];
return gcm(arr[n-1], ngcm(arr, n-1));
}
int main()
{
cout<<gcd(100, 120)<<endl;
cout<<gcm(33, 3)<<endl;
int arr[] = {20, 30, 25, 10};
cout<<ngcd(arr, 4)<<endl;
cout<<ngcm(arr, 4)<<endl;
return 0;
}