昨晚出糗了,发现我虽然点了一部分并行计算、计算机底层、编程语言细节、程序调试方面的技能点,但是在基础编程方面其实很弱。这是本科期间刷题太少所落下的毛病,应该增强一下,特此长期收集总结一下一些非常常用的基本函数。
1.寻找数组的最大值/最小值
T findMax(T* arr, int N)
{
//注意这里,昨晚就是因为顺手就写int,心急起来眼瞎才出糗的
T max = arr[0];
if (0 == N)
return max;
for (int i = 1; i < N; ++i)
{
if (arr[i] > max)
max = arr[i];
}
return max;
}
2.获取数组中特定位置的指针
//1.直接采用指针加减法
T* p = arr + pos;
//2.采用下标访问 + 取址方法
//优先级问题不用担心,[]优先级高于&
T* p = &a[pos];
//3.获取矩阵特定行(一维数组形式)
T* mrow = matrix + r * N_col;
T* mrow = matrix[r * N_col];
//ps.为什么动态矩阵要用一维形式存储?用指针数组模拟二维矩阵不行吗?
//这涉及到TLB和cache,指针数组形式的矩阵,行与行之间内存分布不是连续的
//这会使每一行可能都分布在不同页中,整个矩阵会占据比一维形式多得多的内存页
//这样的矩阵对于TLB和cache都是相当不友好的
//有一个解决办法,先创建一个一维数组形式的矩阵,然后再用指针数组分别指向每行