簡體   English   中英

使用指針和向量

[英]using pointers and vectors

我必須編寫代碼以通過向量搜索數字。 我對如何調用和使用搜索功能感到困惑。

bool linearSearch(const vector&v,int x):一種線性搜索算法,其中x是向量v中的搜索項。它只是從向量v的開頭到結尾開始搜索x,但是當有向量v時,它將停止搜索。一場比賽。 如果搜索成功,則返回true;否則,返回true。 否則,它返回false。 要實現此例程,只需從STL調用find()函數。

•bool binarySearch(const vector <int>&v,int x):一種二進制搜索算法,其中x是向量v中的搜索項。如果搜索成功,則返回true;否則,返回true。 否則,它返回false。 要實現此例程,只需從STL調用binary_search()函數。

•int搜索(const vector <int>&v1,const vector <int>&v2,bool(* p)(const vector <int>&,int)):通用搜索算法–指向搜索例程p (),然后對向量v1中向量v2的每個元素調用p()。 它計算成功搜索的總數,並將該值作為打印例程printStat()的輸入參數返回給main()例程,該例程用於打印搜索算法的最終統計信息。

#include<iostream>
#include <vector>
#include <stdlib.h>     
#include <time.h>
#include<cstdlib>
#include<cmath>
#include <algorithm>

using namespace std;

void genRndNums( vector<int>& v, int vec_size, int seed ) {
    srand(seed);
    for (int i = 0; i < vec_size; i++)
    {

        int a = (rand() % 1000) + 1;//getting a random number
        v.push_back(a);//adding it to the vector 

    }
}

bool linearSearch(const vector<int>& v, int x) {

    find(v.begin(), v.end(), x);
}

bool binarySearch( const vector<int>& v, int x) {
    if (binary_search(v.begin(), v.end(), x))
        return true;
    else
        return false;

}

int search( const vector<int>& container, const vector<int>& searchNums,
            bool (*p)( const vector<int>&, int) ) {

    int count;
    while ( )
    {
        if ((*p)(const vector<int> & container, int)) == true)
            count= count + 1;

    }

}

void sortVec (vector<int>& v) {
    sort(v.begin(), v.end());//sorting the vector
}

void printStat (int totalSucCnt, int vec_size) {

}

int main() {
    const int TOBE_SEARCHED = 5000;
    vector<int> container, tobeSearched;
    genRndNums(container, 10000, 9);
    genRndNums(tobeSearched, TOBE_SEARCHED, 3);

    cout << "\nConducting linear search ..." << endl;
    int linear_search_count = search( container, tobeSearched, linearSearch );
    printStat ( linear_search_count, TOBE_SEARCHED );

    cout << "\nConducting binary search on unsorted container ..." << endl;

    int binary_search_count = search( container, tobeSearched, binarySearch );
    printStat ( binary_search_count, TOBE_SEARCHED );

    sortVec( container );

    cout << "\nConducting binary search on sorted container ..." << endl;
    binary_search_count = search( container, tobeSearched, binarySearch );
   // printStat ( binary_search_count, TOBE_SEARCHED );

    return 0;
}

以下是代碼的修改后的版本,可與線性搜索和二進制搜索一起使用。 該代碼還說明了如何傳遞一個函數並調用該函數以搜索數字。

#include<iostream>
#include <vector>
#include <stdlib.h>     
#include <time.h>
#include<cstdlib>
#include<cmath>
#include <algorithm>

using namespace std;

void genRndNums( vector<int>& v, int vec_size, int seed ) {
    srand(seed);
    for (int i = 0; i < vec_size; i++)
    {

        int a = (rand() % 1000) + 1;//getting a random number
        v.push_back(a);//adding it to the vector 

    }
}

bool linearSearch(const vector<int>& v, int x) {
    return find(v.begin(), v.end(), x) != v.end();
}

/* Works only when the vector is sorted*/
bool binarySearch( const vector<int>& v, int x) {
    return binary_search(v.begin(), v.end(), x);
}

int search( const vector<int>& container, const vector<int>& searchNums,
            bool (*p)( const vector<int>&, int) ) {

    int count = 0;
    for(int i=0; i<searchNums.size(); i++)
    {
        if (p(container, searchNums[i]) == true)
            count= count + 1;
    }
    return count;

}

void sortVec (vector<int>& v) {
    sort(v.begin(), v.end());//sorting the vector
}

void printStat (int totalSucCnt, int vec_size) {
    cout<<"found " << totalSucCnt << "out of " << vec_size<<endl;
}

void printVec(vector<int> & v){
    for(int i=0; i<v.size(); i++)
        cout<<v[i]<<" ";
    cout<<endl;

}
int main() {
    const int TOBE_SEARCHED = 50;
    vector<int> container, tobeSearched;
    genRndNums(container, 100, 9);
    genRndNums(tobeSearched, TOBE_SEARCHED, 3);
    //cout<<"vector 1:"<<endl;
    //printVec(container);

    //cout<<"vector 1:"<<endl;
    //printVec(tobeSearched);

    cout << "\nConducting linear search ..." << endl;
    int linear_search_count = search( container, tobeSearched, linearSearch );
    printStat ( linear_search_count, TOBE_SEARCHED );

    cout << "\nConducting binary search on unsorted container ..." << endl;

    int binary_search_count = search( container, tobeSearched, binarySearch );
    printStat ( binary_search_count, TOBE_SEARCHED );

    sortVec( container );

    cout << "\nConducting binary search on sorted container ..." << endl;
    binary_search_count = search( container, tobeSearched, binarySearch );
    printStat ( binary_search_count, TOBE_SEARCHED );

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM