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

C++ 指针STL向量上的等于运算符,c++,pointers,vector,stl,C++,Pointers,Vector,Stl,我有两个向量,类型为指向点的指针以利用多态性思想,因为我有一些类型的点类继承自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);

我有两个向量,类型为指向点的指针以利用多态性思想,因为我有一些类型的点类继承自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
向量上一个_点;
矢量电流_点;
初始点(以前的点);
初始点(当前点);
做一些程序(以前的点);
进行某些过程(当前点);

您不必推出自己的功能。您可以使用,搭配适当的谓词。这假定
点的
运算符==
工作

bool ok = equal(begin(previous_points), end(previous_points),
                begin(current_points), end(current_points),
                [](const Point* lhs, const Point* rhs){ return *lhs == * rhs; });
在C++14之前,可以使用此重载。在这里,您需要确保
当前\u点
的长度与
以前的\u点
的长度相同

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

如果指针不相同,则内容也不相同。您的比较将只比较向量中的指针,而不是它们指向的对象。我在point类中实现了equals==运算符,因此它将比较内容。忘了提了。@JoachimPileborg这是我的问题,我需要实现我自己的函数来实现吗?或者我仍然可以使用操作符?哦,太好了,c++14之前的重载对我很有效。最后一个问题,由我来确保长度是相同的,你的意思是我需要做这两个检查(长度和内容),以便得到相等值,并像==那样有效地比较它?再次感谢,我想我需要更多地了解C++上的lambda函数,这是我第一次使用它。“DimaGimburg是的,我的意思是。”code>std::equal
比较范围,C++11之前的版本只设置第二个范围的开头。因此,对于
==
,有两件事是不同的。首先,第二个范围更长<代码>=
应该为false,但子范围可以等于第一个子范围。第二,第二个范围可能会更短,在这种情况下,您会超出边界并获得未定义的行为,这是非常糟糕的,必须避免。这是滚动您自己的函数^_^