2014-06-23 2 views
1

사전과 비슷한 기능이 있지만 void 반환 유형 대신 반복기를 반환합니까? 내가 좋아하는 함수를 호출하도록 원하는 :은 iterator를 반환하는 advance와 비슷한 기능을합니까?

//... 
[&value](InIter part_begin, std::size_t part_count) 
     { 
      difference_type ret = 
       std::count(part_begin, std::advance(part_begin,count), value); 
      return ret; 
     }, 

을하지만 사전은 void 반환 형식 기능, 그래서 현재

//... 
[&value](InIter part_begin, std::size_t part_count) 
     { 
      InIter end = part_begin; 
      std::advance(end,part_count); 
      difference_type ret = std::count(part_begin, end, value); 
      return ret; 
     }, 

가 난 그냥 수 없습니다 유의하는 것이 중요하고 있어요 part_begin + count,이 중 일부는 작동하지 않습니다. 현재 작업하고있는 이터레이터 중 어느 쪽이 현재 std::advance을 사용해야합니다. 이 일을하는 더 깨끗한 방법이 있습니까?

답변

5

std::next을 사용하면 지정된 요소 수만큼 고급 반복기를 얻을 수 있습니다. std::advance과 대조적으로 std::next은 전달 된 반복자 자체를 변경하지 않습니다.

[&value](InIter part_begin, std::size_t count) { 
     difference_type ret = 
      std::count(part_begin, std::next(part_begin,count), value); 
     return ret; 
    }, 
+0

! 빠른 답장을 보내 주셔서 감사합니다. –

6

예, std::next이라고합니다. 인수를 수정하지 않습니다.

관련 문제