STL指针向量上的等于运算符

时间:2016-10-04 14:47:16

标签: c++ pointers vector stl

我有2个向量,指向Point的指针类型以利用多态性的想法,因为我有一些类型的点类继承自Point类。

vector<Point*> previous_points;
vector<Point*> current_points;

init_points(previous_points);
init_points(current_points);

do_some_proccess(previous_points);
do_some_proccess(current_points);

cout << (previous_points == current_points) << endl; // returns 0

==运算符返回0即使内容相同,原因是(从我读到和理解)它是比较指针的向量内容和指针当然不相同( init_points为每个向量创建具有相同内容的新对象。

我的问题是,我是否仍然可以使用比较运算符并将其与我的向量中的指针内容进行比较而不是指针本身?或者我是否必须实施自己的 is_content_equals 功能才能做到这一点?

编辑:我在Point类中实现了equals ==运算符,因此它正在比较point的内容。

感谢

1 个答案:

答案 0 :(得分:9)

您不必推出自己的功能。您可以使用std::equal和合适的谓词。这假定operator==的工作Point

bool ok = equal(begin(previous_points), end(previous_points),
                begin(current_points), end(current_points),
                [](const Point* lhs, const Point* rhs){ return *lhs == * rhs; });

Pre C ++ 14,你可以使用这个重载。在此,您需要确保current_pointsprevious_points的长度相同。

bool ok = equal(begin(previous_points), end(previous_points),
                begin(current_points),
                [](const Point* lhs, const Point* rhs){ return *lhs == * rhs; });