//: C07:StringDeque.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.
// převedeno ze StringVector.cpp.
#include <cstddef>
#include <ctime>
#include <deque>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include "../require.h"
using namespace std;

int main(int argc, char* argv[]) {
  char* jmenoSoub = "StringDeque.cpp";
  if(argc > 1) jmenoSoub = argv[1];
  ifstream in(jmenoSoub);
  assure(in, jmenoSoub);
  vector<string> vretezce;
  deque<string> dretezce;
  string radek;
  // čas načítání do kontejneru vector:
  clock_t tiky = clock();
  while(getline(in, radek))
    vretezce.push_back(radek);
  tiky = clock() - tiky;
  cout << "čtení do kontejneru vector: " << tiky << endl;
  // opakovat pro kontejner deque:
  ifstream in2(jmenoSoub);
  assure(in2, jmenoSoub);
  tiky = clock();
  while(getline(in2, radek))
    dretezce.push_back(radek);
  tiky = clock() - tiky;
  cout << "čtení do kontejneru deque: " << tiky << endl;
  // nyní porovnat indexování:
  tiky = clock();
  for(size_t i = 0; i < vretezce.size(); i++) {
    ostringstream ss;
    ss << i;
    vretezce[i] = ss.str() + ": " + vretezce[i];
  }
  tiky = clock() - tiky;
  cout << "Indexování kontejneru vector: " << tiky << endl;
  tiky = clock();
  for(size_t j = 0; j < dretezce.size(); j++) {
    ostringstream ss;
    ss << j;
    dretezce[j] = ss.str() + ": " + dretezce[j];
  }
  tiky = clock() - tiky;
  cout << "indexování kontejneru deque: " << tiky << endl;
  // Porovnání Iterátorů
  ofstream tmp1("tmp1.tmp"), tmp2("tmp2.tmp");
  tiky = clock();
  copy(vretezce.begin(), vretezce.end(),
    ostream_iterator<string>(tmp1, "\n"));
  tiky = clock() - tiky;
  cout << "Používání iterátorů pro vector: " << tiky << endl;
  tiky = clock();
  copy(dretezce.begin(), dretezce.end(),
    ostream_iterator<string>(tmp2, "\n"));
  tiky = clock() - tiky;
  cout << "Používání iterátorů pro deque: " << tiky << endl;
} ///:~
