我有 2 个 vector ,类型为指向 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,原因是(根据我的阅读和理解)它正在比较作为指针的 vector 内容,当然指针不相同( init_points 为每个 vector 创建具有相同内容的新对象)。
我的问题是,我是否仍可以使用比较运算符来比较 vector 中指针的内容,而不是指针本身?还是我必须实现自己的 is_content_equals 函数才能做到这一点?
编辑:我在 Point 类中实现了 equals == 运算符,因此它正在比较 point 的内容。
谢谢
最佳答案
您不必推出自己的功能。您可以使用 std::equal
, 有一个合适的谓词。这假设 Point
有一个有效的 operator==
。
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_points
与 previous_points
的长度相同。
bool ok = equal(begin(previous_points), end(previous_points),
begin(current_points),
[](const Point* lhs, const Point* rhs){ return *lhs == * rhs; });
关于c++ - 指针的 STL vector 上的等于运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855341/