例如,我想写过载功能set_difference
该类型std::set<point>
如何为STL容器和算法函数编写重载操作符?
class myIter : public std::iterator<std::input_iterator_tag, int> {
public:
myIter(int n) : num(n){}
myIter(const myIter & n) : num(n.num){}
int & operator *(){return num;}
myIter & operator ++(){++num; return *this;}
bool operator !=(const myIter & n){return n.num != num;}
private:
int num;
};
struct point
{
point(int X, int Y):x(X), y(Y){}
int x;
int y;
}
int main()
{
set <point> myset;
myset.insert(point(1, 1);
myset.insert(point(3, 2);
myset.insert(point(5, 3);
//find the missing elements in set for `point.x` using `set_difference`
std::set<int> missing;
std::set_difference(myIter(myset.begin()->x+1), myIter(myset.rbegin()->x),
myset.begin(), myset.end(), std::insert_iterator<std::set<int>>(missing, missing.begin()));
}
比较应用std::set_difference
上point.x
变量后,set<int> missing
必须是:
missing[0] {2}
missing[1] {4}
我怎么知道怎么写操作的重载操作符?
的使用注意事项Boost.Operators'的'无缝地定义这些“completary运营商”自动:) – 2010-09-08 07:35:26
@Matthieu:我一直在指望你出现和建议那。 ':)'(我现在还没有机会在一年内做很多C++,所以我从来没有试过这个,我不自觉地提出我自己没有做过的事情,也不知道如何去做所以随时都可以随时指出它的出处) – sbi 2010-09-08 07:38:43
我很高兴:)它的语法糖更避免写任何“功能性”的样板代码,但它有助于保持代码整洁。 – 2010-09-08 08:10:02