65,208
社区成员
发帖
与我相关
我的任务
分享int main()
{
int t;
cin >> t;
MySet<int> stInt;
int a[100];
while(t--) {
int n;
cin >> n;
for(int i = 0;i < n; ++i )
cin >> a[i];
MySet<int> stInt(a,a+n);
MyPrint(stInt.begin(),stInt.end());
cout << endl;
int s,e;
cin >> s >> e;
pair<MySet<int>::iterator, MySet<int>::iterator> p;
p = stInt.FindInterval(s,e);
if( p.first != p.second) {
MyPrint(p.first,p.second);
cout << endl;
}
else
cout << "Interval Not Found" << endl;
cin >> n;
MySet<double,greater<double> > stDouble;
for( int i = 0;i < n; ++i) {
double d;
cin >> d;
stDouble.insert(d);
}
MyPrint(stDouble.begin(),stDouble.end());
cout << endl;
double w;
cin >> w;
cout << * stDouble.upper_bound(w) << endl;
}
return 0;
}template<typename T, class Compare = less<T>, class Alloc = allocator<T> >
class MySet:public set<T>
{
private:
T st[100];
public:
MySet():set<T>() {}
MySet(int *first, int *last)
{
int *idx = first;
for(int i = 0; idx <= last; ++idx, ++i)
st[i] = *idx;
}
pair<typename set<T>::iterator, typename set<T>::iterator>FindInterval(int lower, int upper)
{
typename set<T>::iterator low, up;
low = lower_bound(lower);
up = upper_bound(upper);
//if(low != *this->end() && up != *this->begin())
return (pair<typename set<T>::iterator, typename set<T>::iterator>(low, up));
}
void friend MyPrint(typename set<T>::iterator first_, typename set<T>::iterator last_);
};
template<typename T>
void MyPrint(typename MySet<T>::iterator first_, typename MySet<T>::iterator last_)
{
typename MySet<T>::iterator it = first_;
for(; it != last_; ++it)
cout << *it << " ";
}template<class T,class Pred = less<T> >
class MySet:public set<T,Pred>{
public:
typedef typename set<T,Pred>::iterator iterator;
MySet(T* first,T* last):set<T,Pred>(first,last){}
MySet(){}
pair<iterator,iterator> FindInterval(T s,T e){
iterator fp = set<T,Pred>::lower_bound(s+1);
iterator lp = set<T,Pred>::lower_bound(e);
return make_pair(fp,lp);
}
};
template<class T>
void MyPrint(T pa,T pb){
for(;pa!=pb;pa++)
cout << *pa << ' ';
}
template<class T,class CP=less<T> >
class MySet:public set<T,CP>
{
public:
MySet(){}
MySet(T* _beg,T* _end):set<T,CP>(_beg,_end){}
typedef typename set<T,CP>::iterator iterator;
iterator begin(){return set<T,CP>::begin();}
iterator end(){return set<T,CP>::end();}
pair<iterator,iterator> FindInterval(T _s,T _e);
iterator lower_bound(T key);
iterator upper_bound(T key);
};
template<class T>
void MyPrint(const T _beg,const T _end)
{
T itr=_beg;
while(itr!=_end)
{
cout<<*itr<<' ';
++itr;
}
}
template<class T,class CP>
pair<typename MySet<T,CP>::iterator,typename MySet<T,CP>::iterator> MySet<T,CP>::FindInterval(T _s,T _e)
{
iterator _beg,_end;
_beg=lower_bound(_s);
_end=upper_bound(_e);
return make_pair(_beg,_end);
}
template<class T,class CP>
typename MySet<T,CP>::iterator MySet<T,CP>::lower_bound(T key)
{
iterator itr=begin();
CP cp;
while((cp(*itr,key)||*itr==key)&&itr!=end())
++itr;
return itr;
}
template<class T,class CP>
typename MySet<T,CP>::iterator MySet<T,CP>::upper_bound(T key)
{
iterator itr=begin();
CP cp;
while(cp(*itr,key)&&itr!=end())
++itr;
return itr;
}MySet():set<T>() {Pred pr = less<T>;}
MySet(int *first, int *last):set<T> (first, last) { Pred pr = less<T>;}
但是编译出错:
error C2275: 'std::less<_Ty>' : illegal use of this type as an expression
with
[
_Ty=int
]
请教这是什么原因呢?template<typename T>
void MyPrint(T first_, T last_)
{
T it = first_;
for(; it != last_; ++it)
cout << *it << " ";
}
直接这样写就可以啦
楼主你在研究stl源码吗,看得我头好大,我还是太菜了
我写迭代器大多用auto,感觉腰不酸腿不疼,写起来好爽