Advertisement
Guest User

Untitled

a guest
May 25th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1.  
  2. #pragma once
  3. #include<iostream>
  4.  
  5. using namespace std;
  6. template <typename T>
  7. class Vector{
  8. private:
  9. size_t dimensions;
  10. T* data;
  11. public:
  12. Vector<T>(size_t dimensions) {
  13. if (dimensions <= 0)
  14. throw std::domain_error("rozmiar tablicy musi być wiekszy niz zero");
  15. else{
  16. this->dimensions = dimensions;
  17. this->data = new T[dimensions];
  18.  
  19.  
  20.  
  21. }
  22. }
  23.  
  24. Vector<T>(const Vector<T> & vec) : dimensions(vec.size()), data(new T[vec.size()]) {
  25. for (size_t i = 0; i < vec.size();i++) {
  26. data[i] = vec[i];
  27. }
  28. }
  29. virtual~Vector<T>() {
  30.  
  31. if(data) delete data;
  32. }
  33.  
  34. size_t size() const {
  35. return dimensions;
  36. }
  37. T & at(size_t index) {
  38. return data[index];
  39. }
  40. T at(size_t index) const {
  41. return data[index];
  42. }
  43. T & operator[](size_t index) {
  44.  
  45. return data[index];
  46. }
  47. T operator[](size_t index) const {
  48. if (index > sizeof(data))
  49. throw std::out_of_range("Element o takim indeksie nie istnieje");
  50. else
  51. return data[index];
  52. }
  53.  
  54. Vector<T> & operator=(const Vector<T> & vec) {
  55. delete data;
  56. dimensions = vec.size();
  57. data = new T[dimensions];
  58. for (size_t i = 0; i < vec.size(); i++) {
  59. data[i] = vec[i];
  60. }
  61. return *this;
  62. }
  63.  
  64. };
  65. template<typename T>
  66. Vector<T> add(const Vector<T>& a, const Vector<T>& b) {
  67. Vector<T> c(a.size());
  68. for (size_t i = 0; i < a.size(); i++) {
  69. c[i] = a[i] + b[i];
  70. }
  71. return c;
  72. }
  73. template<typename T>
  74. bool equals(const Vector<T>& a, const Vector<T>& b) {
  75. if(&a == &b) return true;
  76. if(a.size() != b.size())
  77. return false;
  78. for (size_t i = 0; i < a.size(); i++) {
  79. if(a[i] != b[i]) return false;
  80.  
  81. }
  82. return true;
  83. }
  84. template<typename T>
  85. Vector<T> operator+(const Vector<T>& a, const Vector<T>& b) {
  86. Vector<T> c(a.size());
  87. for (size_t i = 0; i < a.size(); i++) {
  88. c[i] = a[i] + b[i];
  89. }
  90. return c;
  91. }
  92. template<typename T>
  93. Vector<T> operator-(const Vector<T>& a, const Vector<T>& b) {
  94. Vector<T> c(a.size());
  95. for (size_t i = 0; i < a.size(); i++) {
  96. c[i] = a[i] - b[i];
  97. }
  98. return c;
  99. }
  100. template<typename T>
  101. bool operator==(const Vector<T>& a, const Vector<T>& b) {
  102. if (&a == &b) return true;
  103. if (a.size() != b.size()) return false;
  104. for (size_t i = 0; i < a.size(); i++) {
  105. if (a[i] != b[i]) return false;
  106. }
  107. return true;
  108. }
  109. template<typename T>
  110. bool operator!=(const Vector<T>& a, const Vector<T>& b) {
  111. if (&a != &b) return true;
  112. if (a.size() == b.size()) return false;
  113. for (size_t i = 0; i < a.size(); i++) {
  114. if (a[i] == b[i]) return false;
  115. }
  116. return true;
  117. }
  118. template<typename T>
  119. ostream & operator<<(ostream &wyjscie, const Vector<T>& vec) {
  120. for (size_t i = 0; i < vec.size(); i++) {
  121. wyjscie << vec[i] << " : ";
  122. }
  123. return wyjscie;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement