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