老师,请问何时用引用,何时用数组名
来源:6-4 队列的典型应用 Binary Tree Level Order Traversal
慕慕9414451
2017-11-17
在leetcode的第239题求滑动窗口最大值问题中,函数为vector<int> maxSlidingWindow(vector<int>& nums, int k)。
请问老师,为什么形参是vector<int>& nums?能不能用vector<int> nums?因为前面看老师的代码,当用vector数组时并没有使用引用。更延伸一些,何时用指针呢?
1回答
-
在课程中的参数我都是用leetcode的解题模板的自带参数,没有动。所以我的代码如果没有用引用,应该是解题模板自带的参数没有引用。leetcode很多问题解题模板中传入vector参数没有使用引用,但使用引用性能更高,如果很多问题不需要对原数组进行改动,比如这个问题,最好应该使用const vector<int>& nums。
传入vector<int>还是vector<int>&的区别是按值传参还是按引用传参的区别。也就是传入vector<int>的话,整个vector会重新复制一遍。
在C++语言中,引用本身比较复杂,和其他语言中的引用概念不很一致。实质是指针的一次封装。在实践中,引用最常用的地方就是在函数参数的设计上,可以进行按引用的传参。否则,没有引用的话,想在函数中按引用传参,只能靠指针。
指针除了可以在函数传参中做到按引用传参,还可以用于动态空间的管理。比如如果想制作链表或者二叉树这种动态数据结构,就需要指针。另外C系语言中使用指针也可以方便的管理连续内存,所以很多和数组相关的地方,包括字符串,都可以看到指针的影子。
我个人在实际编程中,引用最大的用途就是按引用传参的。其他需要的地方基本都用指针。不过也有少数类设计中类成员由于性能考虑使用引用比较好的情况,但总体也可以使用指针取代。具体无论是引用还是指针都是很庞大也很高级的话题,不是我在问答区一两句话能说清楚的,如果感兴趣的话建议深入研究C++相关语法的资料。
242017-11-18
相似问题