65,211
社区成员
发帖
与我相关
我的任务
分享//把比el小的数存进ia2,把比el小的数存进ivec2;
#include <iostream>
#include <vector>
#include <functional>//less() greater()
#include <algorithm>//find_if
using namespace std;
/*template <typename initerator, typename outiterator,
typename elem, typename comp>
outiterator
filter(initerator first, initerator last, outiterator at,
const elem &val, comp pred)
{
while( (first= find_if(first, last, bind2nd(pred, val)) ) != last)//bind2nd(pred,val)是将val值绑定到
{ //pred所带表的比较函数的第二参数上,然后依次从first~last中取数和val比较
cout<<"found value: "<<*first<<endl; //整体返回小于val的initerator指针,
*at++ = *first++;
}
return at;
}
*/
template <typename initerator, typename outiterator,
typename elem, typename comp>
void
filter(initerator first, initerator last, outiterator at, const elem &val, comp pred)
{
initerator temp=first;
outiterator st= at;
outiterator qt= at;
for (; first != last; ++first)
{
*st++ = *first++;
}
sort(qt, st);
while( (qt= find_if(qt, st, bind2nd(pred, val)) ) != st)//bind2nd(pred,val)是将val值绑定到
{ //pred所带表的比较函数的第二参数上,
cout<<"found value: "<<*at<<endl; //整体返回小于val的initerator指针,
at.erase(qt, st);
}
}
int main()
{
const int el=8;
int ia[el]={12, 8, 43, 0, 6, 21, 3, 7};
vector<int> ivec(ia, ia+el);
// int ia2[el];
vector<int> ivec2(el);
cout<<"filtering integer array for values less than 8\n";
// filter(ia, ia+8, ia2, el, less<int>() );//less递减
cout<<"filtering integer vector for values less than 8\n";
filter(ivec.begin(), ivec.end(), ivec2.begin(), el, greater<int>() );//greater递增
return 0;
}
//把比el小的数存进ia2,把比el大的数存进ivec2;
#include <iostream>
#include <vector>
#include <functional>//less() greater()
#include <algorithm>//find_if
using namespace std;
/*template <typename initerator, typename outiterator,
typename elem, typename comp>
outiterator
filter(initerator first, initerator last, outiterator at,
const elem &val, comp pred)
{
while( (first= find_if(first, last, bind2nd(pred, val)) ) != last)//bind2nd(pred,val)是将val值绑定到
{ //pred所带表的比较函数的第二参数上,然后依次从first~last中取数和val比较
cout<<"found value: "<<*first<<endl; //整体返回小于val的initerator指针,
*at++ = *first++;
}
return at;
}
*/
template <typename initerator, typename outinster,
typename elem>
void filter(initerator first, initerator last, outinster ist, const elem &val)
{
sort(first, last);
for (; first != last; ++first)
{
if (*first > val)
ist++ = *first;
}
}
int main()
{
const int el=8;
int ia[el]={12, 8, 43, 0, 6, 21, 3, 7};
vector<int> ivec(ia, ia+el);
// int ia2[el];
vector<int> ivec2;
cout<<"filtering integer array for values less than 8\n";
// filter(ia, ia+8, ia2, el, less<int>() );//less递减
cout<<"filtering integer vector for values less than 8\n";
filter(ivec.begin(), ivec.end(), back_inserter(ivec2), el);//greater递增
return 0;
}