时间复杂度_函数传参、传引用、传指针
实验开始:
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
#define NODE_SIDE 1000 // 1000~1000000
time_t startTime, endTime;
struct Node
{
int num[NODE_SIDE];
};
void testByValue(Node a){}
void testByReference(Node &a){}
void testByPointer(Node *a){}
int main()
{
long long int TEST_TIME;
Node n;
n.num[0] = 0; //why
int i;
for(int j = 1; j <= 1000; j *= 10) //enlarge TEST_TIME
{
TEST_TIME = 1000000 * j;
i = TEST_TIME;
startTime = clock();
while(i--)
{
testByValue(n);
}
endTime = clock();
cout << "TestByvalue: NODE_SIDE(" << setw(7) << NODE_SIDE << "), TEST_TIME(" << setw(10) << TEST_TIME << "), cost :" << setw(7) << (endTime - startTime) << " ms." << endl;
i = TEST_TIME;
startTime = clock();
while(i--)
{
testByReference(n);
}
endTime = clock();
cout << "TestByReference: NODE_SIDE(" << setw(7) << NODE_SIDE << "), TEST_TIME(" << setw(10) << TEST_TIME << "), cost :" << setw(7) << (endTime - startTime) << " ms." << endl;
i = TEST_TIME;
startTime = clock();
while(i--)
{
testByPointer(&n);
}
endTime = clock();
cout << "TestByPointer: NODE_SIDE(" << setw(7) << NODE_SIDE << "), TEST_TIME(" << setw(10) << TEST_TIME << "), cost :" << setw(7) << (endTime - startTime) << " ms." << endl;
}
return 0;
}
运行上述代码,实验中可以改变NODE_SIZE的值(1000~1000000)。
条件:NODE_SIZE为1000,实验环境为MinGW。(最后的结果 ms并未除以CLOCK_PER_SEC, 不同机器结果可能会有细小的差异。)
某一次的运行结果:
能得到什么结论呢?
1、传值的速度比传引用、传指针的速度慢很多,当传递的参数大小变大时,这个速度的差距会更为明显;
2、当值的大小是原来的十倍时,传值的所需时间并不是原来的十倍;
3、当值的大小变大时,传引用和传指针的所需时间并没有太大改变。
传值给函数调用带来的时间浪费是巨大的,因为传值伴随着值的复制。
原文链接:http://blog.csdn.net/u012925008/article/details/44513337