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自体を参照していますが、私が一番書いたmyStrCmpは、伝値、vector a、伝値であれば、a自体ではありません.
だから、私はね、私はもともと値を伝えるので、この操作をコピーする必要があります.これはメモリと時間を消費するので、効率が低下すると思います.
もちろん、伝入方式の違いは効率に影響するだけでなく、他のことにも影響します.例えば、伝入のパラメータを変えるかどうか、ここにC++伝参方式を話すブログC++伝値、伝引用が添付されています.