fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. struct base {
  6. virtual ~base(){}
  7. virtual int foo()=0;
  8. };
  9. struct derived_1 : base {
  10. derived_1() : data(1){}
  11. int data;
  12. virtual int foo(){return data++;}
  13. };
  14. struct derived_2 : base {
  15. derived_2() : data1(1), data2(1) {}
  16. int data1;
  17. int data2;
  18. virtual int foo(){return --data1+ ++data2;}
  19. };
  20.  
  21. int main()
  22. {
  23. using namespace std;
  24. const int howmany = 10*1000;
  25. const int howoften = 10*1000;
  26.  
  27. vector<derived_1> derived_1s;
  28. vector<derived_2> derived_2s;
  29.  
  30. for (int i=0; i<howmany; ++i)
  31. derived_1s.push_back(derived_1());
  32. for (int i=0; i<howmany; ++i)
  33. derived_2s.push_back(derived_2());
  34.  
  35. vector<base*> foo; // Enthält passende Zeiger auf Elemente in derived_1s und derived_2s
  36.  
  37. for (int i=0; i<howmany; ++i) {
  38. foo.push_back(&derived_1s[i]);
  39. foo.push_back(&derived_2s[i]);
  40. }
  41.  
  42. int sum = 0;
  43. for (int i=0; i<howoften; ++i) {
  44. for (base* b : foo) {
  45. sum += b->foo();
  46. }
  47. }
  48. std::cout << sum << '\n';
  49. }
  50.  
  51.  
Success #stdin #stdout 2.67s 2988KB
stdin
Standard input is empty
stdout
2033793664