#include <iostream>
#include <vector>

using namespace std;

struct Foo
{
  int i;
  Foo(int i): i(i) { cout << "Neu erstellt mit i = " << i << '\n'; }
  Foo(const Foo &foo): i(foo.i) { cout << "Kopie erstellt mit i = " << i << '\n'; }
  const Foo& operator=(const Foo& foo) {i = foo.i; cout << "Zuweisung mit i = " << i << '\n'; return *this;}
  ~Foo() { cout << "Zerstört mit i = " << i << '\n'; }
};

int main()
{
  cout << "Erstelle drei leere vectoren a,b,c.\n";
  vector<Foo> a,b,c;
  for (int i = 0 ;i < 5; ++i)
    {
      cout << "Erstelle ein Foo("<<i<<") und kopiere es in a.\n";
      a.push_back(Foo(i));
    }
  cout << "Erstelle temporären vector und kopiere ihn nach b\n";
  b = vector<Foo>(a.begin(), a.end());
  cout << "Weise c direkt den Inhalt von a zu\n";
  c.assign(a.begin(), a.end());
  cout << "Zerstöre alles.\n";
}
