Референция срещу пойнтер
Здравейте!
За първа задача джъджа дава разлика в паметта и скоростта в полза на пойнтера в следните случаи:
//variant 1 use function by pointer
//Memory: 1.86 MB
//Time: 0.000 s
std::string minBy(std::vector<std::string> &values,
bool (*whichFn)(const std::string& , const std::string& ))
{
sort(values.begin(), values.end(), whichFn);
return values[0];
}
//variant 2 use function by reference
//Memory: 1.88 MB
//Time: 0.015 s
std::string minBy(std::vector<std::string> &values,
bool (&whichFn)(const std::string& , const std::string& ))
{
sort(values.begin(), values.end(), whichFn);
return values[0];
}
Има ли наистина разлика?
Аз се изненадах не толкова за разликата в скоростта, но заради паметта. Не знам как да си напиша тестове.
Пробвам това, но винаги дава различен резултат
#include <iostream> #define UNITS 100000000 #include<ctime> int plus5(int x) { return x + 5; } int minus5(int x) { return x - 5; } int varyCalc(int x, int (*whichFn)(int)) { return whichFn(x); } int main() { int *intArr = new int[UNITS]; clock_t startTime = clock(); //time counter starts for(int i = 0; i < UNITS; ++i) { *(intArr+i) = varyCalc(i, plus5); ++i; *(intArr+i) = varyCalc(i, minus5); } std::cout << ((float)clock() - startTime)/CLOCKS_PER_SEC; std::cout << std::endl; system("pause"); delete []intArr; return 0; }