1
一种程序,我正在包含此谓词结构:重新配制定制谓词如std-谓词
struct Unlike {
Unlike(const Vertex& in) : a(in) {}
bool operator()(const Vertex& b) {
return !(a==b);
}
const Vertex& a;
};
顶点具有结构(其他成员中)与成员X一个结构坐标,Y,Z的比较
bool operator==(const Vertex& a, const Vertex& b) {
bool res = a.coord.X == b.coord.X &&
a.coord.Y == b.coord.Y &&
a.coord.Z == b.coord.Z;
return res;
}
inline bool operator!=(const Vertex& a, const Vertex& b) {
bool res = !(a==b);
return res;
}
这是这样使用:
std::vector<Vertex> vertices;
// Fill and sort vertices
std::vector<Vertex>::iterator vcur, vnext;
vcur = vertices.begin();
while(vcur != vertices.end()) {
vnext = std::find_if(vcur, vertices.end(), Unlike(*vcur));
// Loop over [vcur, vnext]
vcur = vnext;
}
所以我们进行一些calculati与这些功能的实现在所有比较相等的顶点上。
我正在做一些清理代码,并想摆脱Unlike
结构。我试图做这样的,这在我看来是意图更加清晰:
vnext = std::adjacent_find(vcur, vertices.end(), std::not_equal_to<Vertex>());
,但没有保持相同的行为,而是进入一个无限循环。为什么?我误解了adjacent_find
还是not_equal_to
?
嗯,所以我想从'adjacent_find'增加迭代器?除了那最终会超过最后,所以它不是一种替代方案... – carlpett
在任何情况下,std :: adjacent_find都不是你所需要的。 可能是这样的, vnext = std :: find_if(vcur,vertices.end(),bind2nd(not_equal_to(),* vcur)) –
Mazurov
好的,谢谢。你有推荐使用另一个'std :: find *'方法吗? – carlpett