數組(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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章