나는 일반적으로 쓰는 많은 코드가 "이 컨테이너를 통해 반복하고 일부 조건과 일치하는 요소에 대해 X"패턴을 따르고 있음을 확인합니다. 종종 다음과 같습니다일치하는 요소를위한 루프 for clean
는 :
std::vector<int> theList(10);
std::iota(theList.begin(), theList.end(), 0);
for (auto i : theList)
{
if ((i % 2) == 0)
{
//Do something with i
}
}
나는이 경우에 if
문을 좋아하지 않는다 - 그들은 못생긴 정말 루프의 논리에 무슨 일이 일어나고 있는지에서 떨어지다.
내가 원하는 것은 문제를 해결할 수있는 더 좋은 방법이므로 문제의 핵심은 멋지게 표현됩니다. 그것은이 패턴 같은 느낌
std::vector<int> theList(10);
std::iota(theList.begin(), theList.end(), 0);
auto criteria = [](const int& i) -> bool { return (i % 2) == 0; };
for (auto it = std::find_if(theList.begin(), theList.end(), criteria);
it != theList.end();
it = std::find_if(++it, theList.end(), criteria)
)
{
std::cout << *it << ", ";
}
가 청소기 방법으로 std::algorithm
에 그것의 방법을 확인해야합니다 :
내 최고의 시도는 지금까지 모두 좋은하지 않습니다.
더 좋은 방법이 있나요?
'있다 std :: remove_if'를 사용하여 다른 언어의'filter' 고차 함수와 같은리스트를 필터링합니다. 그러나 필터링 된 목록에는 별도의 메모리가 저장되어야합니다. – Gassa