最近工作遇到了想传递vector容器的问题,于是找了很多资料查看了一下,自己也通过调试理解了一下,
代码:
如图:代码第69行定义了一个vector,然后我写了3个初始化容器的函数init_vector1,init_vector2和init_vector3
通过调试可以知道:
init_vector1是无法给容器vec添加元素的,因为这里采用的是值传递,形参的改变无法影响到实参vec,而且实参给形参赋值的时候会调用vector的拷贝构造函数浪费资源。
init_vector2和init_vector3是可以给容器vec添加元素的,他们分别采用的引用传递和指针传递,在函数内部形参发生改变时,这种改变可以直接“传递”给被调用的实参
现在再来看看sort_vector4,这个函数是想给vec容器里面的元素从大到小排序,这里用的是迭代器传参,实际通过调试也达到了预期的效果(其实这里也可以使用引用传参)
总结一下:
如果是想改变容器长度(比如插入,删除某些元素),这个时候采用引用传递或者指针(建议用引用,尽管指针很强大但是也很危险)
如果是需要传递容器其他的用途(比如上面的排序,或者拿来做一些比较检测某个值是否在容器内)可以采用迭代器传递
水平有限,如果有什么错误,望大家指出。