【发布时间】:2014-12-13 02:14:33
【问题描述】:
我想知道是否有任何内置或成熟的方法(即通过 lambda)来遍历 std::list 的元素并找到所有与给定值匹配的元素?我知道我可以遍历所有这些,但我想我会问是否有办法获得一个迭代器,它只遍历与给定条件匹配的元素?下面的示例只为我提供了第一个匹配元素的迭代器。
#include <list>
#include <algorithm>
#include <stdio.h>
int main()
{
std::list<int> List;
List.push_back(100);
List.push_back(200);
List.push_back(300);
List.push_back(100);
int findValue = 100;
auto it = std::find_if(List.begin(), List.end(), [findValue](const int value)
{
return (value == findValue);
});
if (it != List.end())
{
for (; it != List.end(); ++it)
{
printf("%d\n", * it);
}
}
return 0;
}
感谢您的任何反馈。
【问题讨论】:
-
重复调用
find_if以查找剩余的匹配项,只需在每次调用之前递增开始迭代器(假设最后一次调用导致匹配)。如果您经常这样做,请编写一个函数。如果您所做的只是在谓词中使用operator==,则不需要find_if,find会为您做到这一点。 -
“如果有办法获得一个迭代器,它只遍历与给定条件匹配的元素” 也许Filter Iterators?