2013-03-21 2 views
2

빈 컨테이너의 경우 std :: all_of() 및 std : none_of()가 모두 true를 반환합니다.std :: all_of() 및 std : none_of()가있는 빈 컨테이너의 좋은 관용구?

이 개념적 측면을 논하는 것 외에도 컨테이너가 비어 있는지 항상 확인하고 all_of 또는 none_of를 확인하라는 요구를하지 않는 관용구를 제안 할 수 있습니까?

빈 컨테이너의 두 알고리즘에서 동일한 조건부를 사용하면 요소의 ALL 및 NONE 모두에 대해 조건부가 참임을 나타낼 수 있다는 점에서이 작업이 번거롭다. 그래서, 여러분의 (빈) 벡터는 all_of "odd", all_of "even", none_of "odd"및 none_of "even"입니다.

실용적인 수준에서 나는 "처리 준비 중"과 같이 상태 항목에 대한 콜렉션을 검사하고 "NO"에 해당하는 빈 콜렉션을 기대합니다. 처리됩니다. " 별도로 비어 있는지 확인할 수 있지만 다른 가능성을 찾고 있습니다.

+2

무엇이 문제입니까? (auto & e : range) 프로세스 (e)에 대해 'if (all_of (range, ready_for_processing))'를 사용하더라도 괜찮습니다. – ipc

+2

빈 컨테이너에 "ready for processing"술어가 true가 아닌 경우 올바른 답과 같습니다. –

+0

'all_of'는 "S의 모든 x에 대해, P (x)"입니다. 'none_of'는 "S의 모든 x,! P (x)"입니다. 'any_of'는 "S에 존재하는 x, P (x)"입니다. 'all_of'와'none_of'는 서로의 부정이 아닙니다 -''S, P (x)의 모든 x에 대해 "!"존재합니다 x,! P (x) "(일명'any_of (... ,! P)')이고'! none_of (...)'는'any_of (...)'이다. – Yakk

답변

2

당신은 당신의 자신의 래퍼를 작성하고 컨테이너가 비어있는 경우 결과를 수정하는 것을 사용할 수 있습니다 : 나는 대한 항목의 컬렉션을 확인의 관점에서 생각하고 더 실용적인 수준에

// in your namespace, not std: 
template< class InputIt, class UnaryPredicate > 
bool none_of(InputIt first, InputIt last, UnaryPredicate p) 
{ 
    return first != last && std::none_of(first, last, p); 
} 
+0

감사합니다. 이것은 제가 묻고있는 라인을 따라 있습니다. – Arbalest

12

상태는 "처리 준비 중"과 같으며 빈 콜렉션이 "NO, 처리 할 준비가 된 요소가 없습니다"와 일치 할 것으로 기대합니다.

그래서 std::any_of()은 빈 컬렉션에 대해 false을 반환합니다.

"모두 항목이 처리 완료입니까?"라고 예상되는 경우 예상 답변은 "예, 모든 것이 완료되었습니다"라고 표시됩니다. 첫 번째 장소에서 처리 할 항목이없는 경우 (즉, std::all_of())

마찬가지로 "처리 중에 오류가 없었습니까?" "예, 오류가 없었습니다."라고 대답 할 것입니다. 빈 목록 (작업 없음 -> 오류 없음). 이것은 std::none_of()가 확인하는 것입니다.

관련 문제