C++排序算法的测试数组生成模版

  1. 目的
    编写一个可以生成数组的模版类,用于后续的排序算法测试。
    模版类包含如下功能:
    1)可以生成简单类型的特定长度,特定元素顺序的数组。
    2)可以进行生成数据的展示。
    3)提供外部可以获得内部生成数组的接口。
  2. 代码实现
    模版类:
/************************************************************************************
*文件名:Test.h
*文件说明:进行数据测试的类,现阶段只针对数组排序。
*版本:1.0.0
*修改履历:lshuo 创建于2016-3-14
**************************************************************************************/
#ifndef TEST_H
#define TEST_H
#include<iostream>
#include <windows.h>
#include<ctime>
#define NULL 0
namespace Test{
    enum ArrayType{
        PositiveArray = 0,//正序数组
        NegativeArray = 1,//逆序数组
        RandomArray = 2//随机序列
    };
    template <class T,int nSize,ArrayType nArrayType>
    class TestDataCreator
    {
    public:
        TestDataCreator(){
            Sleep(1000);//暂停一秒,否则产生相同的随机种子
            srand((unsigned int)time(NULL));//产生一个随即种子
            T Tbase = T();//产生一个初始基准值。
            int nMod = nSize + 1;
            if (nSize == 0) return;
            switch (nArrayType){
            case PositiveArray:
                //正序数组,从前向后递增
                for (int i = 0; i < nSize; i++){
                    if (i != 0){
                        pArray[i] = pArray[i - 1] + rand() % nMod;
                    }
                    else{
                        pArray[i] = Tbase + rand() % nMod;
                    }
                }
                break;
            case NegativeArray:
                //逆序数组从后向前递增
                for (int i = nSize - 1; i >= 0; i--){
                    if (i != nSize - 1){
                        pArray[i] = pArray[i + 1] + rand() % nMod;
                    }
                    else{
                        pArray[i] = Tbase + rand() % nMod;
                    }
                }
                break;
            case RandomArray:
                //正序数组,从前向后递增
                for (int i = 0; i < nSize; i++){
                    pArray[i] = Tbase + rand() % nMod;
                }
                break;
            }
        };
        ~TestDataCreator(){
        };
    private:
        T pArray[nSize];
    public:
        //返回数组地址
        T* GetArray(){
            return pArray;
        };
        //返回数组长度
        int GetSize(){
            return nSize;
        };
        //展示数组内容
        void ShowArray(){
            using namespace std;
            cout << "数组数据为:" << endl;
            for (int i = 0; i < nSize; i++){
                cout << pArray[i]<<" ";
            }
            cout << endl;
        };
    };
}
#endif

测试代码:

#include<iostream>
#include"Test.h"
int main()
{
    using namespace Test;
    using namespace std;
    //测试升序数组
    TestDataCreator<double, 10, PositiveArray> testPosArray = TestDataCreator<double, 10, PositiveArray>();
    testPosArray.ShowArray();
    //测试降序数组
    TestDataCreator<double, 10, NegativeArray> testNegaArray = TestDataCreator<double, 10, NegativeArray>();
    testNegaArray.ShowArray();
    //测试随机数组
    TestDataCreator<double, 10, RandomArray> testRandArray = TestDataCreator<double, 10, RandomArray>();
    testRandArray.ShowArray();
    cout << "外部输出测试" << endl;
    double* pArray =  testRandArray.GetArray();
    for (int i = 0; i < testRandArray.GetSize(); i++)
    {
        cout << pArray[i] << " ";
    }
    int nWait;
    cin >> nWait;
    return 0;
}

结果输出:
这里写图片描述
3. 错误
1)将模版类的定义与实现分类导致出现无法找到外部标识符错误。
2)三种顺序数据测试的随机种子相同,导致产生的随机序列的数据相同。
3)数组和动态数组混淆,析构函数进行了delete[]
4)和其他语言混淆,使用If then与new对象的错误。
5)名称空间使用不熟悉,导致无法使用枚举类型。
4. 经验总结
1)编程时时刻注意规范,在学习中掌握规范。
2)挑战自己,拔高自己,自然会遇到更多问题,解决这些问题,自然得到更多,更深刻的经验。
3)学习一种语言的开始就要忘记自己以前的所有学习,不然学习中产生很多奇怪的干扰。等到熟悉后,再进行语言的区分揣摩。我只是一个C++初学者。
4)初始抽象的太厉害,没有基础,你只是初学者,必须在实现的基础上,然后抽象,然后重构。没有代码你重构什么。
5)有问题自己去学会解决,网上的资料很多。
5. 后续
1)进行数据排序算法的练习。
2)扩充该类,使之可以生成多维数组,后续练习多维数组相关算法时使用,当前该计划搁置,实现必须基于当前需求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值