Back to slide -- Keyboard shortcut: 'u'        next -- Keyboard shortcut: 'n'          algorithms/for-each-examples-f15/for-each-1.cpp - A possible use of for-each to solve this problem.Lecture 6 - slide 23 : 40
Program 1

// Example from C++ in a Nutshell (2003), page 337-338. Slightly revised. Rather tricky.

#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){    // Called for each item in the list.
    if (first_time)                   // If two elements out of order is met, sorted becomes false.
      first_time = false;
    else if (item < prev_item)        // two elements out of order.
      sorted = false;
    prev_item = item;
  }

  operator bool(){return sorted;}
};

int main(){
  using namespace std;

  // Make a list with some elements:
  list<int> lst{3, 15, 9, 11, 13, 15, 21};

  // Make an instance of the class IsSorted:
  Is_sorted<int> is_sorted{};  

  // Use for_each to find out if lst is sorted:
  if(for_each(lst.begin(), lst.end(), is_sorted))   // for_each returns the object is_sorted
    cout << "The list lst is sorted" << endl;       // via the boolean conversion operator.
  else
    cout << "The list lst is NOT sorted" << endl;   // The given list is not sorted.
}