[英]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.