标题:希望大家来评价评价我的编程风格
只看楼主
夜风依旧
Rank: 2
等 级:论坛游民
帖 子:42
专家分:20
注 册:2008-5-13
结帖率:100%
 问题点数:0 回复次数:5 
希望大家来评价评价我的编程风格
// CSortTest.h
// 提供专用于测试排序函数性能的接口
////////////////////////////////////////////////////////////

#ifndef CSortTest_HEADER
#define CSortTest_HEADER

#include <time.h>
#include <cstdio>
#include <cassert>
#include <cstdlib>

// 测试的状态信息
struct TestInfo
{
    int    nTimeCost;    // 排序时间开销
    int nCountCmp;    // 数据比较次数
    int nCountDlv;    // 数据赋值次数
};

// 自动生成数据的方式
#define LA_RAND            0    // 随机生成
#define LA_MOST_ASC        1    // 基本顺序
#define LA_MOST_DSC        2    // 基本逆序

const size_t ORDERED_DENSITY    = 10;    // 基本有序时的数据密度(两两间的平均距离)
const float     ORDERED_DEGREE        = 80;    // 基本有序时的有序程度(有序部分所占的百分比)

// 专用测试的数据类型声明
class DataType;

// 排序函数名标准形式
typedef void (*SortFunction)(DataType [] ,unsigned);

// 专用测试的数据类型定义
class DataType
{
public:
    DataType() {}
    DataType(const int& tData) : m_tData(tData) {    }
    ~DataType(){}

public:
    operator int() const
    {
        return m_tData;
    }
    bool operator > (const DataType& other) const
    {
        DataType::s_nCountCmp++;
        return m_tData > other.m_tData;
    }
    bool operator < (const DataType& other) const
    {
        DataType::s_nCountCmp++;
        return m_tData < other.m_tData;
    }
    DataType& operator = (int tData)
    {
        m_tData = tData;
        return *this;
    }
    DataType& operator = (const DataType& other)
    {
        DataType::s_nCountDlv++;
        m_tData = other.m_tData;
        return *this;
    }

public:
    // 测试状态信息,注意:每次测试前必须清零
    static int s_nCountCmp;    // 数据比较次数
    static int s_nCountDlv;    // 数据赋值次数

private:
    int    m_tData;
};

// 测试类**************************************************************************

// 专用于测试排序函数的类
class CSortTest
{
public:
    CSortTest()    {    m_pSrcData = NULL;    }
    ~CSortTest(){    delete [] m_pSrcData;    }

public:
    // 启动测试
    void    BeginTest(SortFunction fnSort,TestInfo* pInfo) const;
    // 加载数据
    bool    LoadFrom(char* szFilename);                    // 从文件加载
    void    LoadFrom(const int* pData,size_t nCount);    // 从内存加载
    bool    LoadAuto(size_t nCount,size_t nMethod);        // 自动加载,nMethod为自动生成数据的方式

private:
    DataType*    m_pSrcData;        // 包装后的数据数组
    int            m_nCountData;    // 数组长度
};

#endif

// CSortTest.cpp
// 排序类的实现
/////////////////////////////////////////////////////////////////

#include "CSortTest.h"

#define VOID_NAMESPACE_BEGIN    namespace {
#define VOID_NAMESPACE_END        }

// 静态数据成员的初始化
int DataType::s_nCountCmp = 0;
int DataType::s_nCountDlv = 0;

// 排序测试类的实现***************************************

// 调试模式下用于测试数据状态的输出函数
#ifdef _DEBUG
void print(DataType* p,int n)
{
    DataType* pEnd = p + n;
    while(p < pEnd)
        printf("%d ",(int)*p++);
}
#else
void print(DataType* p,int n)    {    }
#endif

void CSortTest::BeginTest(SortFunction fnSort,TestInfo* pInfo) const
{
    // 取数
    DataType* pData = new DataType[m_nCountData];
    for(int i = 0;i < m_nCountData;i++)
        pData[i] = m_pSrcData[i];
    // 初始化状态信息
    DataType::s_nCountCmp = 0;
    DataType::s_nCountDlv = 0;
    clock_t start = clock();
    // 调用排序函数
    (*fnSort)(pData,m_nCountData);
    // 填充状态信息
    pInfo->nTimeCost = clock() - start;
    pInfo->nCountCmp = DataType::s_nCountCmp;
    pInfo->nCountDlv = DataType::s_nCountDlv;
    // 释放排序数组
    delete [] pData;
}

void CSortTest::LoadFrom(const int* pData,size_t nCount)
{
    delete m_pSrcData;
    m_nCountData = nCount;
    m_pSrcData = new DataType[nCount];
    for(size_t i = 0;i < nCount;i++)
        m_pSrcData[i] = pData[i];
}

bool CSortTest::LoadFrom(char* szFilename)
{
    delete m_pSrcData;
    m_nCountData = 0;

    FILE* pFile = fopen(szFilename,"r");
    if(pFile == NULL)
    {
        m_pSrcData = NULL;
        return 0;
    }
    // 测试数据总量
    int temp;
    while(fscanf(pFile,"%d",&temp) != EOF)
        m_nCountData++;
    // 加载到内存
    m_pSrcData = new DataType[m_nCountData];
    DataType* p = m_pSrcData;
    fseek(pFile,0,SEEK_SET);
    while(fscanf(pFile,"%d",&temp) != EOF)
        *p++ = temp;
    return 1;
}

// 自动生成数据函数组

VOID_NAMESPACE_BEGIN

#define DST    ORDERED_DENSITY
#define DGR    ORDERED_DEGREE

DataType* LoadRand(size_t nCount)
{
    srand((unsigned)time(NULL));
    DataType* pData = new DataType[nCount];
    for(size_t i = 0;i < nCount;i++)
        pData[i] = rand();
    return pData;
}

DataType* LoadMostAsc(size_t nCount)
{
    srand((unsigned)time(NULL));
    DataType* pData = new DataType[nCount];
    // 生成升序序列
    pData[0] = rand() % DST;
    size_t i = 1;
    for(;i < nCount;i++)
        pData[i] = pData[i - 1] + rand() % DST;
    // 部分随机打乱
    size_t nBad = nCount - (DGR/100)*nCount;
    for(i = 0;i < nBad;i++)
    {
        int j = rand() % nCount;
        if(rand()%2 && pData[j] != DST)
            pData[j] = rand() % (pData[j] - DST);
        else
            pData[j] = pData[j] + DST + rand() % pData[nCount - 1];
    }
    return pData;
}

DataType* LoadMostDsc(size_t nCount)
{
    srand((unsigned)time(NULL));
    DataType* pData = new DataType[nCount];
    // 生成升序序列
    pData[nCount - 1] = rand() % DST;
    size_t i = nCount - 1;
    for(;i > 0;i--)
        pData[i - 1] = pData[i] + rand() % DST;
    // 部分随机打乱
    size_t nBad = nCount - (DGR/100)*nCount;
    for(i = 0;i < nBad;i++)
    {
        int j = rand() % nCount;
        if(!(rand()%2) && pData[j] != DST)
            pData[j] = rand() % (pData[j] - DST);
        else
            pData[j] = pData[j] + DST + rand() % pData[0];
    }
    return pData;
}

VOID_NAMESPACE_END

bool CSortTest::LoadAuto(size_t nCount,size_t nMethod)
{
    delete [] m_pSrcData;
    m_nCountData = nCount;

    switch(nMethod)
    {
    case LA_RAND:
        m_pSrcData = LoadRand(nCount);
        break;
    case LA_MOST_ASC:
        m_pSrcData = LoadMostAsc(nCount);
        break;
    case LA_MOST_DSC:
        m_pSrcData = LoadMostDsc(nCount);
        break;
    default:
        m_pSrcData = NULL;
        return 0;
    }
    return 1;
}
搜索更多相关主题的帖子: 评价 风格 
2008-09-02 20:32
raulxxyuer
Rank: 1
等 级:新手上路
威 望:1
帖 子:178
专家分:0
注 册:2007-4-23
得分:0 
你不适合编程.就这点

我很沒用,總是學不會遺忘,總是學不會割捨本不屬於我的東西。
2008-09-02 21:09
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
得分:0 
关键是要和团队风格统一

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-09-02 21:11
zzt_428
Rank: 2
来 自:南京师范大学
等 级:论坛游民
威 望:2
帖 子:243
专家分:22
注 册:2008-7-6
得分:0 
回复
上面说的对,关键要和团队一致.你的代码相对还是比较规范的.
2008-09-02 21:19
BlueDreame
Rank: 1
等 级:新手上路
帖 子:545
专家分:2
注 册:2004-12-16
得分:0 
我觉得风格还是不错的。
但是类似int这种基本类型没有必要const &吧?

2008-09-03 14:38
sun389567475
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2008-8-18
得分:0 
不错,注释稍逊点。
最主要的还是要跟团队风格一致。
2008-09-03 14:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-231087-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032616 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved