今日は、関数オブジェクトの書き方を教えて頂けないでしょうか
2次元配列から、特定の行、列から、検索する場合、高度なことをしない場合、下記のよ
うにできるのですが、
高度なことを、習得したくて書籍なども購入して読むのですが、偶数の個数を数えると
か、単純な例しか載って居なくて、苦戦しています。よろしくお願いします、環境は
VC++2008です。
operatorを実装する、templateを準備すれば、良いというのは分るのですが・・・・・
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
typedef vector<vector<int> > ProperyVector;
int main()
{
// 4列10行の配列を作る
ProperyVector array(10, vector<int>(4));
for(int i = 0; i < 10; ++i)
{
for(int j = 0; j < 4; ++j)
{
array[i][j] = i * j;
}
}
int dest = 6;
for(int start = 2; start < 10; ++start) // 検索開始行は予め分っている
{
if(array[start][1] == dest) // 検索開始列も分っている
{
cout << start << endl;
break;
}
}
//ProperyVector::iterator iter = find_if(array.begin(), array.end(), dest, Pred);
//cout << *iter << endl;
return 0;
}
高度って何?
できないことをやろうとしているとか?
なにが高度なんかよぉわからんけど、呈示されたのと同じことを find_if でやるなら:
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
typedef std::vector<int> Property;
typedef std::vector<Property> ProperyVector;
struct Pred {
int col;
int target;
Pred(int c, int t) : col(c), target(t) {}
bool operator()(const Property& prop) const {
return prop[col] == target;
}
};
int main()
{
// 4列10行の配列を作る
ProperyVector array(10, Property(4));
for(int i = 0; i < 10; ++i) {
for(int j = 0; j < 4; ++j) {
array[i][j] = i * j;
}
}
int dest = 6;
ProperyVector::iterator iter = find_if(array.begin()+2, array.begin()+10,
Pred(1,dest));
if ( iter != array.begin()+10 ) {
std::cout << distance(array.begin(), iter) << std::endl;
}
return 0;
}
wclrp ( 'o')さん、επιστημηさん
お世話になります。返信が遅くなりましたごめんなさい。
>>高度って何?
関数オブジェクトや、アルゴリズムを用いた、プログラムを、勝手にそう表現しました、
言葉足らずで、すみませんでした。
一点教えて、頂きたいのですが。
επιστημηさんが示してくださった
struct Pred {
int col;
int target;
Pred(int c, int t) : col(c), target(t) {}
bool operator()(const Property& prop) const {
return prop[col] == target;
}
};
Pred(int c, int t) : col(c), target(t) {}
この部分で、2つの、int型パラメータを持たせた、コンストラクタを生成しています
bool operator()(const Property& prop) const
そして、関数オブジェクトへオーバーロードさせていますが
この関数オブジェクトのパラメータは、int型のvectorコンテナなのに
引数の型が異なるのに、オーバーロードができていることが、不思議です、理由を
教えていただけないでしょうか。よろしくお願いします。
気づきました(^^;
return prop[col] == target;
ここの部分、colとtargetに使われるからですね。