fork(1) download
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class Base
  7. {
  8. public:
  9. virtual void sayHello()
  10. {
  11. cout << "Hello from Base\n";
  12. }
  13. };
  14.  
  15. class Derived1 : public Base
  16. {
  17. public:
  18. virtual void sayHello()
  19. {
  20. cout << "Hello from Derived1\n";
  21. }
  22. };
  23.  
  24. class Derived2 : public Base
  25. {
  26. public:
  27. virtual void sayHello()
  28. {
  29. cout << "Hello from Derived2\n";
  30. }
  31. };
  32.  
  33. vector<Base*> elements;
  34.  
  35. template <class T>
  36. void deleteByType()
  37. {
  38. for (int i = 0; i < elements.size(); i++)
  39. {
  40. T* a = dynamic_cast<T*>(elements[i]);
  41. if (a != nullptr)
  42. {
  43. delete a;
  44. elements.erase(elements.begin() + i);
  45. cout << i << "th element deleted\n";
  46. i--;
  47. }
  48. }
  49. }
  50.  
  51. int main()
  52. {
  53. elements.push_back(new Derived1);
  54. elements.push_back(new Derived2);
  55. elements.push_back(new Derived2);
  56. elements.push_back(new Derived1);
  57.  
  58. for (Base* element : elements)
  59. {
  60. element->sayHello();
  61. }
  62.  
  63. deleteByType<Derived1>();
  64.  
  65. for (Base* element : elements)
  66. {
  67. element->sayHello();
  68. }
  69.  
  70.  
  71. for (Base* element : elements)
  72. {
  73. delete element;
  74. }
  75. elements.clear();
  76. return 0;
  77. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Hello from Derived1
Hello from Derived2
Hello from Derived2
Hello from Derived1
0th element deleted
2th element deleted
Hello from Derived2
Hello from Derived2