我正试图加速我的代码(下面是一个最小的、可重现的例子),我被告知,对于我的比较器函数来说,通过引用传递将是一种更有效的方法。这是我第一次听说这个短语,所以我查了一下,找到了一些有例子的网站,但我不知道什么时候和如何使用它。在这种情况下我将如何使用它?
#include <array> #include <iostream> #include <algorithm> #include <fstream> #include <ctime> #include <random> using namespace std; class arrMember { public: int var; arrMember(int var) : var(var) {} arrMember() {}; }; array<int,1000000> arraySource; array<arrMember,1000000> arrayObjects; bool compare(arrMember(x),arrMember(y)) { return (x.var < y.var); } void arrayPrint() { ofstream output("arrayPrint.txt"); for (int k = 0; k != arrayObjects.size(); k++) { output << arrayObjects[k].var << endl; } output.close(); } void sort() { int j = 0; for (auto i = arraySource.begin(); i != arraySource.end(); i++,j++) { arrayObjects[j] = arrMember(arraySource[j]); } sort(arrayObjects.begin(),arrayObjects.end(),compare); } int main(){ random_device rd{}; mt19937 engine{ rd() }; uniform_int_distribution<int> dist{ 0,9999 }; for (int x = 0; x < arraySource.size(); ++x){ arraySource[x] = dist(engine); } cout << "Executing sort... "; clock_t t1 = clock(); sort(); clock_t t2 = clock(); double timeDiff = ((double)(t2 - t1)) / CLOCKS_PER_SEC; cout << "Sort finished. CPU time was " << timeDiff << " seconds. "; arrayPrint(); return 0; }
谢谢您的帮助。