是否可以使用std::find()
通过1次调用搜索多个元素?示例:std::find(vector.begin(), vector.end(), 0&&1&&D)
由于
答案 0 :(得分:5)
您无法使用std::find
。假设0&&1&&D
是三个值的列表,并且您试图在向量中找到具有任何这些值的元素,您可以使用:
std::find_if
带有谓词(lambda可能最简单,例如[](const T& x) { return x == 0 || x == 1 || x == d; }
,其中T
是vector
所持有的任何类型,或
std::find_first_of
(链接页面有一个很好的例子)。
答案 1 :(得分:3)
std::for_each
可能适合您。
std::for_each(vector.begin(),
vector.end(),
[](auto& item) -> void {if (item == <xxx> ) { /* Use the item */ });
您在评论中提到:
这可能是一个单独的问题,但如果某些元素存在,我可以使用一种方法在向量中搜索吗?
std::any_of
就是这个功能。
bool found = std::any_of(vector.begin(),
vector.end(),
[](auto& item) -> bool { return item == <xxx>; });
答案 2 :(得分:2)
答案 3 :(得分:0)
如果您需要三个值相邻,那么自己实施find()
可能是最简单的方法:
template <class Iterator, class T>
Iterator find_by_three_values(Iterator first, Iterator last, T value1, T value2, T value3)
{
for (; first != last; ++first) {
if (*first == value1
&& first + 1 != last && *(first + 1) == value2
&& first + 2 != last && *(first + 2) == value3) {
return first;
}
}
return last;
}