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