Back to notes -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'  Slide program -- Keyboard shortcut: 't'    A possible use of for-each to solve this problem.Lecture 5 - slide 37 : 39
Program 1
// Example from C++ in a Nutshell, page 337-338. Slightly revised.

#include <iostream>
#include <algorithm>
#include <list>

// An object of an instance of Is_sorted is used as a function
// with state, corresponding to the three data members.
template<typename T> class Is_sorted{
private:
  bool first_time,    // true when applied first time
       sorted;        // true as along as prefix is sorted
  T prev_item;        // the previous item

public:
  Is_sorted(): first_time(true), sorted(true){}

  void operator() (const T& item){
    if (first_time)
      first_time = false;
    else if (item < prev_item)
      sorted = false;
    prev_item = item;
  }

  operator bool(){return sorted;}
};

int main(){
  using namespace std;

  list<int> lst;
  lst.push_back(3); lst.push_back(15); lst.push_back(9); lst.push_back(11); 
  lst.push_back(13); lst.push_back(15); lst.push_back(19); lst.push_back(21); 

  if(for_each(lst.begin(), lst.end(), Is_sorted<int>()))
    cout << "The list lst is sorted" << endl;
  else
    cout << "The list lst is NOT sorted" << endl;
}