gpt4 book ai didi

c++ - 为什么这个示例有效?

转载 作者:行者123 更新时间:2023-11-27 23:35:18 25 4
gpt4 key购买 nike

  typedef pair<double, double> dd; 

const double epsilon = 1e-6;

struct sort_by_polar_angle {
dd center;
// Constuctor of any type
// Just find and store the center
template<typename T> sort_by_polar_angle(T b, T e) {
int count = 0;
center = dd(0,0);
while(b != e) {
center.first += b->first;
center.second += b->second;
b++;
count++;
}
double k = count ? (1.0/count) : 0;
center.first *= k;
center.second *= k;
}
// Compare two points, return true if the first one is earlier
// than the second one looking by polar angle
// Remember, that when writing comparator, you should
// override not ‘operator <’ but ‘operator ()’
bool operator () (const dd& a, const dd& b) const {
double p1 = atan2(a.second-center.second, a.first-center.first);
double p2 = atan2(b.second-center.second, b.first-center.first);
return p1 + epsilon < p2;
}
};

// ...

vector < dd > points;

sort(all(points), sort_by_polar_angle(all(points)));

当调用 sort_by_polar_angle() 时,它是否起到构造函数的作用?重载的operator()如何正确使用?

最佳答案

当您在 sort() 函数中调用 sort_by_polar_angle() 时,您正在创建一个 sort_by_polar_angle 类型的临时对象(即它的构造函数叫做)。在排序算法内部,您传递的仿函数对象使用类似 functor() 的东西,它将被翻译成 functor.operator()

关于c++ - 为什么这个示例有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/780580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com