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

Dim*_*urg 3 c++ pointers stl vector

我有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
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

jua*_*nza 11

您不必推出自己的功能.您可以使用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; });
Run Code Online (Sandbox Code Playgroud)

预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; });
Run Code Online (Sandbox Code Playgroud)

  • 这_is_滚动你自己的函数^ _ ^ (2认同)