Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'                iterators/inserters/F14/ins-2.cpp - Same program - simplified in various ways in C++11.Lecture 6 - slide 6 : 40
Program 2

// C++11 version - Still demonstration of output iterators and inserters.
// Takes advantages of auto. Uses next instead of chaining of prefix increment.

#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <iterator>   // std::next

template <typename CONT> void print_seq(const CONT &v);

int main(){
  using namespace std;

  // Make and initialize a vector:
  vector<double> vd;
  for(int i = 1; i <= 10; i++)
     vd.push_back(i + i/10.0);

  // BACK INSERT ITERATOR:
  // Make back insert iterator (an output iterator).
  // The back inserter overloads the assignment operator,
  // see The C++ Programming Language 3ed, page 556.
  auto bii = back_inserter(vd);

  *bii = 20;
  *bii = 21;

  print_seq(vd);  // 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11 20 21


  // FRONT INSERT ITERATOR             (cannot be used on vector)

  list<double> ld;              
  for(int i = 1; i <= 10; i++)
     ld.push_back(i + i/10.0);

  auto fii = front_inserter(ld);
  *fii = -3;
  *fii = -5.7;

  print_seq(ld);   // -5.7 -3 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11


  // INSERT ITERATOR   (on the list ld. Will also work on the vector vd).
  auto ins_begin = ld.begin();  
  auto pos = next(ld.begin(), 3);    // Advance the iterator 3 positions.

  // An inserter that starts inserting at ins_begin
  auto ili = inserter(ld, pos);

  *ili = 100;
  *ili = 101;
  print_seq(ld);   // -5.7 -3 1.1 100 101 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 11

}

// Print the sequence v on standard output:
template <typename CONT> void print_seq(const CONT &v){
  typename CONT::const_iterator it = v.begin();
  while(it != v.end()){
     std::cout << *it << " ";
     it++;
  }
  std::cout << std::endl;
}