#include <iostream>
#include <vector>
#include <string>
#include "base/tools.hpp"
using namespace std;
class Test
{
public:
int id;
string name;
public:
Test(int _id,string _name)
{
id = _id;
name = _name;
}
};
int get(int key,vector<Test>::iterator begin_it,vector<Test>::iterator end_it,vector<Test>::iterator & it)
{
end_it -= 1;
vector<Test>::iterator mid_it = begin_it + (end_it-begin_it)/2;
int count = 0;
while(begin_it <= end_it)
{
count++;
if(mid_it->id == key)
{
it=mid_it;
cout<<"total search count:"<<count<<endl;
return true;
}
else
{
if(mid_it->id < key)
{
begin_it = mid_it + 1;
}
else
{
end_it = mid_it - 1;
}
}
mid_it = begin_it + (end_it - begin_it)/2;
}
it = end_it;
return false;
}
template<typename T> bool get2(int key,T begin_it,T end_it,T & it)
{
end_it -= 1;
//typename vector<T>::iterator mid_it = begin_it + (end_it-begin_it)/2;
T mid_it = begin_it + (end_it-begin_it)/2;
int count = 0;
while(begin_it <= end_it)
{
count++;
if(mid_it->id == key)
{
it=mid_it;
cout<<"total search count:"<<count<<endl;
return true;
}
else
{
if(mid_it->id < key)
{
begin_it = mid_it + 1;
}
else
{
end_it = mid_it - 1;
}
}
mid_it = begin_it + (end_it - begin_it)/2;
}
it = end_it;
return false;
}
int main()
{
vector<Test> vect;
for(int i = 0;i<10000000;i++)
{
Test test(i,int_to_str(i));
vect.push_back(test);
}
//sort(vect.begin(),vect.end());
cout<<"vector has builded!"<<endl;
clock_t start,finish;
start = clock();
/*
vector<Test>::iterator it = vect.begin();
while(it!=vect.end())
{
if(it->id == 9999999)
{
cout<<"id:"<<it->id<<"\tname:"<<it->name<<endl;
break;
}
it++;
}
*/
vector<Test>::iterator it;
if(get(99999,vect.begin(),vect.end(),it))
{
cout<<"id:"<<it->id<<"\tit->name:"<<it->name<<endl;
}
else
{
cout<<"not found!"<<endl;
}
finish = clock();
cout<<"程序共运行时间(s):"<<(double)(finish-start)/CLOCKS_PER_SEC<<"\n";
}