/*
 * Marc Groenewegen, 2023
 */
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>


void show_element(const long& el)
{
  std::cout << el << " ";
} // show_element()


int main()
{
std::vector<long> v;
std::vector<long>::iterator index;
std::vector<long>::iterator p;

  for(int i=0; i<10; i++) v.push_back(i);

  std::cout << "Vector bevat " << v.size() << " elementen" << std::endl;
  std::cout << "Eerste element: " << v.front() << std::endl;
  std::cout << "Laatste element: " << v.back() << std::endl;

  /*
   * Show vector contents using iterator
   */
  index=v.begin();
  while(index != v.end()){
    std::cout << *index << " ";
    index++;
  } // while
  std::cout << std::endl << std::endl;


  /*
   * Show vector contents using for_each()
   */
  for_each(v.begin(),v.end(),show_element);
  std::cout << std::endl << std::endl;


  /*
   * Find value in vector using find()
   */
  p = find(v.begin(),v.end(),7);
  if(p == v.end()){
    std::cout << "Waarde niet gevonden\n\n";
  }
  else std::cout << *p << std::endl << std::endl;


  /*
   * Find sub-range in vector using search()
   */
  std::vector<long> subv;

  for(int i=3; i<6; i++) subv.push_back(i);
  p = search(v.begin(),v.end(),subv.begin(),subv.end());
  if(p == v.end()){
    std::cout << "Subsequence niet gevonden\n\n";
  }
  else{
    for_each(p,p+subv.size(),show_element);
    std::cout << std::endl << std::endl;
  }


  /*
   * Find patterns in a random vector
   */
  std::vector<long> ranvec;
  std::vector<long> pattern;

  pattern.push_back(3);
  pattern.push_back(4);

  srandom(5);
  for(int i=0; i<10; i++) ranvec.push_back((long)(10.0 * random() / RAND_MAX));
  for_each(ranvec.begin(),ranvec.end(),show_element);
  std::cout << std::endl << std::endl;

  p = search(ranvec.begin(),ranvec.end(),pattern.begin(),pattern.end());
  if(p == ranvec.end()){
    std::cout << "Subsequence niet gevonden\n\n";
  }
  else{
    for_each(p,p+pattern.size(),show_element);
    std::cout << std::endl << std::endl;
  }
  /*
  index=ranvec.begin();
  while(index != ranvec.end()){
    index++;
  } // while
  */
} // main()
