九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

几种交换方式与参数传递方式效率的比较,发现STL最慢

/*Copyright (c) 2007,九天雁翎

* All rights reserved.

* 几种交换方式与参数传递方式效率的比较

* 完成日期:2007年7月7日*/

#include "stdafx.h"

#include "myself.h"

#include <iostream>

#include <utility>

using namespace std;

const int RUNTIME = 1e5;

void swap1(int &v1, int &v2);

void swap2(int &v1, int &v2);

void swap3(int *p1, int *p2);

 

int main()

{

    int v1 = 10000;

    int v2 = 20000;

    double t1 = myself::getTime();

    for (int i = 0; i < RUNTIME; ++i)

    {

       swap1(v1,v2);

    }

    double t2 = myself::getTime() - t1;

    cout <<v1 <<'/t' <<v2 <<endl;

    cout <<"Reference pass parameter and bit^ way used time: "<<t2 <<endl;

 

    t1 = myself::getTime();

    for (int i = 0; i < RUNTIME; ++i)

    {

       swap2(v1,v2);

    }

    t2 = myself::getTime() - t1;

    cout <<v1 <<'/t' <<v2 <<endl;

    cout <<"Reference pass parameter way used time: "<<t2 <<endl;

 

    t1 = myself::getTime();

    for (int i = 0; i < RUNTIME; ++i)

    {

       swap3(&v1,&v2);

    }

    t2 = myself::getTime() - t1;

    cout <<v1 <<'/t' <<v2 <<endl;

    cout <<"Point pass parameter way used time:" <<t2 <<endl;

 

    for (int i = 0; i < RUNTIME; ++i)

    {

       swap(v1,v2);

    }

    t2 = myself::getTime() - t1;

    cout <<v1 <<'/t' <<v2 <<endl;

    cout <<"STL way used time: " <<t2 <<endl;

 

    return 0;

}

void swap1(int &v1, int &v2)

{

    v1 = v1^v2;

    v2 = v1^v2;

    v1 = v1^v2;

}

 

void swap2(int &v1, int &v2)

{

    int temp = v1;

    v1 = v2;

    v2 = temp;

}

 

void swap3(int *p1, int *p2)

{

    int temp = *p1;

    *p1 = *p2;

    *p2 = temp;

}

 

结果是,指针效率一般最快,STL最慢,按位或没有效率优势,你可以改变RUNTIME去试试不同结果

分类:  C++ 
标签:  C++  STL 

Posted By 九天雁翎 at 九天雁翎的博客 on 2007年07月07日

前一篇: 郁闷的要死,因为用中文注释,带来了无穷的痛苦 后一篇: 和实现有关的相同字符串存储方式检验的思考及c-string字符串