按照http://www.cplusplus.com/reference/algorithm/swap/
中提到的,swap的原理应该是这样的:
template <class T> void swap ( T& a, T& b )
{
T c(a); a=b; b=c;
}
比如
a[] = {1, 2, 3};
b[] = {4, 5, 6};
swap(a, b)
就可以将两个数组进行交换。
但是按照我传统对C语言的理解,我本身自己写的函数如
void func(int *a){
//TODO
}
func(a);
传过去的是个数字首个内容的地址。如果交换指针的值的话,交换的也只是首个位置,无法更改后续位置。
而swap源码可以交换整个数组。而且,我并没有传整个数组的长度进去。甚至类似的,多维数组也可以交换。
那么他实现的机理是什么呢?
题主,下面是swap的实现,它使用的是模板实现,当我传递数组给它的时候,它能推导出数组大小是多少,比如int a[] ={1,2,3,4},当给把a传递给这个函数的时候,其中_Size就推导出来是4.
iter_swap的功能是交换两个迭代器指向的值,
上面swap里的内容是下面这样的:
你编译一下这个代码就明白了, 不明白再来上面问
你没理解c++引用这个概念。
引用和指针相似,但又不同。
解引用操作会得到原对象本身,而不像指针那样,只能得到指针指向的那一块内存中的内容
so,
就相当于把整个数组传给函数了,这就是引用的优越之处,不然干嘛c++弄个引用的概念呢?