//: C07:IndexingVsAt.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Porovnání "at()" a operator[].
#include <ctime>
#include <deque>
#include <iostream>
#include <vector>
#include "../require.h"
using namespace std;

int main(int argc, char* argv[]) {
  long pocet = 1000;
  int sz = 1000;
  if(argc >= 2) pocet = atoi(argv[1]);
  if(argc >= 3) sz = atoi(argv[2]);
  vector<int> vi(sz);
  clock_t tiky = clock();
  for(int i1 = 0; i1 < pocet; i1++)
    for(int j = 0; j < sz; j++)
      vi[j];
  cout << "vector[] " << clock() - tiky << endl;
  tiky = clock();
  for(int i2 = 0; i2 < pocet; i2++)
    for(int j = 0; j < sz; j++)
      vi.at(j);
  cout << "vector::at() " << clock()-tiky <<endl;
  deque<int> di(sz);
  tiky = clock();
  for(int i3 = 0; i3 < pocet; i3++)
    for(int j = 0; j < sz; j++)
      di[j];
  cout << "deque[] " << clock() - tiky << endl;
  tiky = clock();
  for(int i4 = 0; i4 < pocet; i4++)
    for(int j = 0; j < sz; j++)
      di.at(j);
  cout << "deque::at() " << clock()-tiky <<endl;
  // demonstrovat at() při překročení rozsahu:
  try {
    di.at(vi.size() + 1);
  } catch(...) {
    cerr << "Vyvolána výjimka" << endl;
  }
} ///:~
