C++传参方式对运行速度的影响

在牛客上做了一道题,里面包含了排序,思路是正确的,但是却超时。苦思不得其解,跟别人的答案一个个比较,让我发现是传参方式的不同,导致运行效率差了一些。
题目是“牛牛的魔法卡”,题目是什么不重要,重要的是里面需要用到sort()。而且要自己定义比较函数,于是我就直接定义了:

bool myStrCmp(vector<int> a, vector<int> b) {
	//比较两张卡片的位置信息
	return a[1]<b[1];
}

调用也很简单

sort(card.begin(), card.end(), myStrCmp);

这个程序运行没有问题,但是通过率70%,提示运行时间过长。检查循环没有错误,那么就是效率问题了。
正确答案的排序函数如下:在规定时间通过了所以测试。

sort(card.begin(), card.end(), 
	[](vector<int>&a, vector<int>&b) {return a[1] < b[1]; });

我们对比一下哈,正确函数把比较函数直接写在了sort()里面,嗯,简洁一下。但是这不是重点,因为我写进去,也没有提升速度。
关键在于,这个比较函数的传参类型是引用!!!vector&a引用a就是传入a本身,但是我最上面写的那个myStrCmp,是传值,vector a,传值的话,就是对a的一个拷贝,并不是a本身。

所以,我想呀,因为我原来是传值,需要拷贝这个操作,这就会消耗内存和时间,所以导致效率下降。

当然喽,传入方式的区别不仅仅会影响效率,还会影响到其他的,比如是不是要改变传入的参数,这里附一个讲C++传参方式的博客C++传值、传引用

你可能感兴趣的:(日常编程遇到的小问题,c++)