在借的一本书里看到很多以前没注意的编程细节,说是trick,或者trivial,但是用的时候不一定想得到。
比如输出ASCII值:cout << static_cast<int>(ch) << endl;
返回一个指向s中第一次出现字符ch的地址:返回一个指向s中第一次出现字符ch的地址:strchr(s,ch);
返回一个指向s中最后一次出现字符ch的地址:返回一个指向s中最后一次出现字符ch的地址:strrchr(s,ch);
从src至多取n个字符拼接到dst后。函数的返回值是dst的地址:strncat(dst,src,n);
函数模板:
所有的函数模板的定义都以关键字template开头,之后是用尖括号括起来的模板的形式参数声明。每个形式参数之前都有关键字class或者typename。形式参数声明后面就是标准的函数定义,只是函数中的某些参数或局部变量的类型不再是系统的标准类型或用户自定义的类型,而是模板的形式参数。
template<class T>
T max(T a, T b)
{
return a > b ? a : b;
}
这本书给出的两个很基础算法的写法我觉得非常简洁
欧几里德算法:
int gcd(int a, int b)
{
int r;
while(true){
r= a % b;
if (r == 0) return b;
a = b;
b = r;
}
二分查找函数:
int binarySearch(int data[], int start, int end, int x)
{
int mid=(start + end) / 2;
if(start > end) return -1;
if(x == data[mid]) return mid;
if(x < data[mid]) return binarySearch(data, start, mid-1, x);
else return binarySearch(data, mid+1, end, x);
}
int binarySearch(int data[], int size, int x)
{
return binarySearch(data, 0, size-1, x);
}