前面一篇博客讲到了在函数的传参中数组是不能依靠复制传递的,而vector是可以复制的,但是由于vector中通常会含有很多元素,为了避免大量的复制,可以将容器实参以引用的方式避免复制。下面主要讲讲在实际当中,对数组和容器的传参的习惯手法。
1.数组传参
1)使用指针传参(数组除了不能够具有直接复制的特性,还有一个特性,就是数组名通常情况下会自动转化为指向其第一个元素的指针)
具体形式有
void size_array( int *);
void size_array( int array[]);
void size_array( int array[size]);
这三种形式是等价的,形参类型其实都是int *,其中第三种方式比较令人费解,主要是使用了数组长度,但在C++中,编译器会忽略数组形参的长度,值对类型匹配进行检测。
2)使用引用传递数组
此情况下,数组的长度和类型都会被编译器检测。形参的长度和实参的必须完全一致。
注意它的格式是:
int size_array(int (&arr)[10] ) {..................};
int array[10];
int a = size_array(array );
函数size_array中的的长度10一定要和实参的长度一致。
2.容器传参
容器传参通常采用传递指向要处理元素的迭代器来传参。
个人觉得在处理数组和容器的传参问题上,主要还是使用指针或者迭代器比较方便。