有个程序简化下来大概是这样:
#include <algorithm>
#include <iostream>
#include <vector>
struct A {
int x;
int y;
};
int main() {
A a, b, c, d;
std::vector<A> vec_to_iter = {a, c, d};
bool ans = std::find(vec_to_iter.begin(), vec_to_iter.end(), b);
return 0;
}
当然这是错的:
程序目的是判断某个对象比如 b
是否在 vec_to_tier
中,不知道可不可以使用vector自带的迭代器来判断?
改了一下,不过还有报错:
#include <algorithm>
#include <iostream>
#include <ostream>
#include <vector>
struct A {
int x;
int y;
};
int main() {
const A a{ 2,2 }, b{ 3,3 }, c{ 1,3 }, d{ 1,1 };
std::vector<A> vec_to_iter = { a, c, d };
bool ans = std::find(vec_to_iter.begin(), vec_to_iter.end(), b) != vec_to_iter.end();
std::cout << ans << std::endl;
return 0;
}
clang++给我报出来的是 const A
不能和 A
作 ==
的判断。
std::find
返回的是 iterator ,指向找到的元素。可以用
bool ans = std::find(vec_to_iter.begin(), vec_to_iter.end(), b) != vec_to_iter.end();
得到一个 bool。std::find
是用operator==
来比较的。现在并没有提供operator==
,得增加一个,比如: