STL for_each

3717 단어 C/C++
내용.
레코드 foreach 의 사용법.
참고 자료
  • http://www.cplusplus.com/reference/algorithm/for_each/
  • Standard for C++ 11

  • C++표준 내용
    '25.2.4 For each[alg.foreach]'에서 발췌 했다.
    template
    Function for_each(InputIterator first, InputIterator last, Function f);
    
  • Requires: Function shall meet the requirements of MoveConstructible (Table 20). [ Note: Function need not meet the requirements of CopyConstructible (Table 21). —end note ]
  • Effects: Applies f to the result of dereferencing every iterator in the range [first,last), starting from first and proceeding to last - 1. [ Note: If the type of first satisfies the requirements of a mutable iterator, f may apply nonconstant functions through the dereferenced iterator.—end note ]
  • Returns: std::move(f).
  • Complexity: Applies f exactly last - first times.
  • Remarks: If f returns a result, the result is ignored.

  • for_each 알고리즘
    이 장 은 첫 번 째 참고 페이지 의 내용 이다.
    함수 원형
    template 
       Function for_each (InputIterator first, InputIterator last, Function fn);
    

    기능.
    교체 기[first,last)구간 의 모든 요 소 를 함수 fn 으로 호출 합 니 다.
    Applies function fn to each of the elements in the range [first,last).
    The behavior of this template function is equivalent to:
    template
      Function for_each(InputIterator first, InputIterator last, Function fn)
    {
      while (first!=last) {
        fn (*first);
        ++first;
      }
      return fn;      // or, since C++11: return move(fn);
    }
    

    Parameters
  • first, last: Input iterators to the initial and final positions in a sequence. The range used is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
  • fn: Unary function that accepts an element in the range as argument. This can either be a function pointer or a move constructible function object. Its return value, if any, is ignored.

  • 설명:sequence 의 교체 기 를 언급 하지만 sequence container 만 의 교체 기 는 아 닙 니 다.앞에서 발췌 한 c++standard 와 같이 이 점 을 요구 하지 않 았 습 니 다.아래 의 예시 에서 우 리 는http://www.cplusplus.com/reference/algorithm/for_each/](http://www.cplusplus.com/reference/algorithm/for_each/)를 바탕 으로 set 의 예 를 추가 한 것 도 이 점 을 설명 했다.
    Example
    코드
    #include      // std::cout
    #include     // std::for_each
    #include        // std::vector
    #include           // std::set
    
    void myfunction (int i) {  // function:
      std::cout << ' ' << i;
    }
    
    struct myclass {           // function object type:
      void operator() (int i) {std::cout << ' ' << i;}
    } myobject;
    
    int main () {
      std::vector myvector;
      myvector.push_back(10);
      myvector.push_back(20);
      myvector.push_back(30);
    
      std::cout << "myvector contains:";
      for_each (myvector.begin(), myvector.end(), myfunction);
      std::cout << '
    '; // or: std::cout << "myvector contains:"; for_each (myvector.begin(), myvector.end(), myobject); std::cout << '
    '; //set std::set values(myvector.begin(), myvector.end()); std::cout << "set contains:"; for_each(values.begin(), values.end(), myfunction); std::cout << '
    '; return 0; }

    Output
    myvector contains: 10 20 30
    myvector contains: 10 20 30
    set contains: 10 20 30
    

    좋은 웹페이지 즐겨찾기