C++のvector&find_if
Cというstructが次のように聞かれたのを見た.
code:
struct C
{
int v1;
int v2;
};
vector中国式に適用してvector
内部要素を検索する場合はどうすればいいですか?
一般的な解法はfor()ループを線行として探すのが一般的ですが、実は直感的で簡単です.
ここではもう一つの簡易解法を提供する....
find_if()の3番目のパラメータは判断式の入力を提供するが,残念ながら1つのパラメータしか入力できない.
また、サンプル値のペアではなく*iteratorのタイプが入力されます.
例えばこのcvの中の物のv 1,v 2は順番に
v1 v2
1 100
2 52
3 25
4 75
5 84
6 33
では、v 2=75の物件を探すにはどうすればいいですか?
1.functor point
code:
bool Cfind75(const C& obj)
{
return obj.v2==75;
}
2.functor
code:
class Cfind75{
public:
bool operator()(const C& obj)
{
return obj.v2==75;
}
};
しかしこのように比较する値は书かれて死にました!!
そう...だからこの时templateは役に立ちました....
だから私たちは書き直しました
code:
template<int n>
class CComp{
public:
bool operator()(const C& lhs)
{
return (lhs.v2==n);
}
};
どのように使いますか?简単です....
code:
vector<C>::iterator cviter =
find_if(cv.begin(),cv.end(),CComp<75>());
cviterは,cv中のC型別物のv 2値が75に戻った位置である.簡単なアプリケーションで、大学の質問もありません.しかし、STLに詳しくない人は無視することが多い.
#include
#include
using namespace std;
struct C
C():v1(0),v2(0){}
C operator()(const int& val1,const int& val2)
v1=val1;
return *this;
~C(){}
int v2;
template
public:
{
}
{
C val;
cv.push_back(val(2,52));
cv.push_back(val(4,75));
cv.push_back(val(6,33));
vector
cout<
return 0;