数组(vector)对数器——C++

对数器的概念和作用见这篇文章:

https://blog.csdn.net/weixin_42513339/article/details/101779755

 

花了点时间写了vector和数组的对数器,个人觉得代码还能优化,这里先贴下

#include <iostream>
#include<cstdlib>
#include<ctime>
#include<vector>
using namespace std;

//数组(vector)对数器---------------------------------------------------
//1.数组转vector(若一开始就剩vector便忽略)
vector<int> ATransformV(int* a, int len){
    vector<int>arr;
    for(int i = 0; i < len; i++)
        arr.push_back(a[i]);
    return arr;
}

//vector转数组(若一开始就剩vector便忽略)
int* VTransformA(vector<int>a,int len){
    int* arr = new int[len];
    for(int i =0; i<len; i++)
        arr[i] = a[i];
    return arr;
}

//2.产生随机数组,注:srand不能放在此函数中,否则导致一秒内产生的数组内相同
vector<int> randomArr(int maxValue,int maxSize){
    vector<int>arr;
    for(int i = 0; i < maxSize; i++){
        arr.push_back(rand() % maxValue) ;
    }
    return arr;
}

//3.比较两个输出数组是否相等(验证方法正确性);
bool Compare(vector<int> arr1,vector<int> arr2){
    if(arr1.empty() && arr2.empty()) return true;
    if((arr1.empty() && !arr2.empty()) || (!arr1.empty() && arr2.empty()))
        return true;
    if(arr1.size() != arr2.size()) return false;
    for(int i = 0; i < arr1.size(); i ++){
            if(arr1[i] != arr2[i])
                return false;
        }
    return true;
}

//仅用于打印测试
void printArr(vector<int>arr){
    cout<<"len = "<<arr.size()<<endl;
    for(int i =0; i < arr.size(); i++)
        cout<<arr[i]<<"   ";
    putchar(10);
    cout<<"---------------------------------------------"<<endl;
}

//4.调用函数
void alguTest(int time = 5000, int maxValue = 5000, int maxSize = 500){
    for (int i = 0; i<time; i++) {
            vector<int>arr1 = randomArr(maxValue,maxSize); //第一个数组
            vector<int>arr2(arr1);  //第二个数组

            //复杂度高算法-对arr1操作
            //

            //自己写的算法对arr2操作
            //

            if (!Compare(arr1, arr2)) {
                cout<<"Error"<<endl;
                cout<<"arr1:"<<endl;
                printArr(arr1);
                cout<<"arr2:"<<endl;
                printArr(arr2);
                break;
            }
        }
        cout<<"Right"<<endl;
}
//数组对数器---------------------------------------------------

int main()
{
    srand(time(0));
    alguTest();
    return 0;
}

用法的话,数组对数器的代码加上,在main函数里加上srand(),就可以调用了,自己写的算法和正确算法在alguTest中写上即可。(注意:若自己的算法传参是数组,那么就需要把vector样例先转换成数组,再传入;若算法结果是数组,那么再转回vector)

 

冒泡算法例子:

#include <iostream>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<algorithm>
using namespace std;

void mySwap(int* a, int* b){
    if(a!=b){
        (*a) ^= (*b);
        (*b) ^= (*a);
        (*a) ^= (*b);
    }
}

//冒泡
void bubbleSort(int* arr,int len){
    for(int i = 0; i < len -1; i++){
        for(int j = 0; j < len - 1 - i; j++){
            if(arr[j] > arr[j+1])
                mySwap(&arr[j],&arr[j+1]);
        }
    }
}

//数组(vector)对数器---------------------------------------------------

/*中间步骤省略*/

//4.调用函数
void alguTest(int time = 5000, int maxValue = 5000, int maxSize = 500){
    for (int i = 0; i<time; i++) {
            vector<int>arr1 = randomArr(maxValue,maxSize); //第一个数组
            vector<int>arr2(arr1);  //第二个数组

            //复杂度高算法-对arr1操作
            sort(arr1.begin(),arr1.end());

            //自己写的算法对arr2操作
            int  len2 = arr2.size();
            int* arr3 = VTransformA(arr2,len2);//由于冒泡算法传参数组,先vector转数组
            bubbleSort(arr3,len2);
            arr2 =ATransformV(arr3,len2); //数组转成vector

            if (!Compare(arr1, arr2)) {
                cout<<"Error"<<endl;
                cout<<"arr1:"<<endl;
                printArr(arr1);
                cout<<"arr2:"<<endl;
                printArr(arr2);
                break;
            }
        }
        cout<<"Right"<<endl;
}
//数组对数器---------------------------------------------------

int main()
{
    srand(time(0));
    alguTest();
    return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值