c++ - 指针的 STL vector 上的等于运算符

标签 c++ pointers vector stl

我有 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_pointsprevious_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/

相关文章:

c++ - clang-tidy - 忽略第三方标题代码

c++ - 从dll c++获取字符串

c++ - 如何在 Eigen 中翻译矩阵(4x4)?

c++ - 接收字符串并使用它来调用 C++ 方法

c++ - 为什么我不能将新对象添加到我的对象指针数组中?

c - 如何将字符串分配给 char* 指针?

c - 函数指针 : why is (*fptr)(6, 7) 与 (fptr)(6,7) 相同,如果函数是 add(int , int )

C++ - 迭代从 find_if 返回的 std::vector<>

Ruby SIMD 和 SSE

vector - 如何将字符串的 HashSet 转换为向量?