1、数组在作为函数参数传递的时候,就退化为指针了,这个时候无论是sizeof(array)还是sizeof(*array)得到的都只能是这个指针指的一个元素所占的字节数目(4),而不能得到数组的长度!!
2、vector类型作为函数参数传递的时候,是在进行复制,实际上的顺序并不会改变,而数组类型作为函数参数只能传递首指针,这个时候在函数中进行的操作实际会影响数组本身,这个时候,一般要先进行一次复制,再来进行操作。
3、注意模板类和模板函数都只能包含在h文件中,而不能在cpp文件中!
4、
#ifndef GUARD_median_h
#define GUARD_median_h
#include <iostream>
#include <algorithm>
#include <stdexcept>
#include <cstdlib>
using std::domain_error;
template <class DATA,class SIZE>
DATA median(<strong>DATA* ptr</strong>, SIZE size)//注意如何设参数的技巧
{
if (size == 0)
throw domain_error("Median of an empty vector");
DATA *arr = <strong>new DATA[size]</strong>;/*以前在c中常常遇到希望可以动态调整数组元素个数,在c++中可以用new来实现!
注意,不能用如同arr[n]这种来定义,因为c与c++均要求数组元素个数是常量!所以要提高使用new(用来动态分配内存)的敏感性!*/
memcpy(arr, ptr, <strong>size*sizeof(DATA)</strong>);/*注意memcpy函数是用来赋值整块内存里面的内容的,故第三个参数的大小一定是实际所占用的内存的大小(
要乘上每个元素的大小,而非仅仅只是元素的个数!!!(此时如果忘记乘上那个元素所占的内存,一般会出现很奇怪的数字。正如此,在出现很奇怪的数字的时候,
考虑是否忘记考虑元素所占的内存*/
sort(arr, arr + size);
SIZE mid = size / 2;
DATA median = size % 2 == 0 ? (arr[mid] + arr[mid - 1]) / 2 : arr[mid];
delete[] arr;//注意语法,有new就要有delete,养成好习惯!
return median;
}
#endif
5、如果定义时候,进行了如int a(b);这种操作,实际上后续操作针对的其实是b。
6.error 4996的解决方法:#pragma warning(disable : 4996)