fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T, int capacity>
  5. class Queue
  6. {
  7. int values[capacity];
  8. int size;
  9.  
  10. public:
  11. Queue();
  12. void add(int value);
  13. int getSize() const;
  14. int getValue(int index) const;
  15.  
  16. template <int Other_capacity>
  17. Queue<T, capacity + Other_capacity> operator+(const Queue<T, Other_capacity>& obj) const;
  18.  
  19. friend ostream& operator<<(ostream& out, const Queue &q) {
  20. for(int i = 0; i < q.size; ++i) {
  21. out << q.values[i] << " ";
  22. }
  23. out << endl;
  24. return out;
  25. }
  26. };
  27.  
  28. template <typename T, int capacity>
  29. Queue<T, capacity>::Queue()
  30. {
  31. size = 0;
  32. }
  33.  
  34. template <typename T, int capacity>
  35. void Queue<T, capacity>::add(int value)
  36. {
  37. if (size < capacity)
  38. values[size++] = value;
  39. }
  40.  
  41. template <typename T, int capacity>
  42. int Queue<T, capacity>::getSize() const {
  43. return size;
  44. }
  45.  
  46. template <typename T, int capacity>
  47. int Queue<T, capacity>::getValue(int index) const {
  48. return values[index];
  49. }
  50.  
  51. template <typename T, int capacity>
  52. template <int Other_capacity>
  53. Queue<T, capacity + Other_capacity> Queue<T, capacity>::operator+(const Queue<T, Other_capacity>& obj) const {
  54. Queue<T, capacity + Other_capacity> result;
  55. for(int i = 0; i < size; ++i)
  56. result.add(getValue(i));
  57. for(int i = 0; i < obj.getSize(); ++i)
  58. result.add(obj.getValue(i));
  59. return result;
  60. }
  61.  
  62. int main()
  63. {
  64. Queue<int, 15> even;
  65. Queue<int, 10> odd;
  66.  
  67. even.add(2);
  68. even.add(4);
  69. even.add(6);
  70.  
  71. odd.add(1);
  72. odd.add(3);
  73. odd.add(5);
  74.  
  75. Queue<int, 25> sum = even + odd;
  76.  
  77. cout << sum;
  78.  
  79. return 0;
  80. }
Success #stdin #stdout 0.01s 5492KB
stdin
Standard input is empty
stdout
2 4 6 1 3 5