Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. //
  2. // DynArray.cpp
  3. // pad6
  4. //
  5. // Created by Marvin Eifler on 16.01.20.
  6. //
  7.  
  8. #include <stdio.h>
  9. #include "DynArray.h"
  10. #include <iostream>
  11. #include <algorithm>
  12.  
  13. //Standardkonstruktor mit Kapazität von 4
  14. DynArray::DynArray() {
  15. arr = new int[4];
  16. cap = 4;
  17. siz = 0;
  18. }
  19.  
  20.  
  21. //Konstruktor mit der Size als Parameter. Capacity wird durch die Size *2 ermittelt.
  22. DynArray::DynArray(int size) {
  23. if (size < 0){
  24. throw std::invalid_argument("Size smaller than 1 is not allowed");
  25. }
  26. cap = size*2;
  27. siz = 0;
  28. arr = new int[cap];
  29. }
  30.  
  31.  
  32. //Copy Constructor
  33. DynArray::DynArray(const DynArray& toCopy)
  34. {
  35. //Altes arr löschen neu setzen und befüllen. Die Size wird von dem zu kopierendem übernommen
  36. //delete[] arr;
  37. this->siz = toCopy.siz;
  38. cap = toCopy.cap;
  39. arr = new int[cap];
  40.  
  41. //Neues Arr mit den zu kopierenden Werten füllen
  42. for (int i = 0; i < siz; i++)
  43. {
  44. arr[i] = toCopy.arr[i];
  45. }
  46. }
  47.  
  48. //Dekonstruktor löscht das Array
  49. DynArray::~DynArray() {
  50. delete[] arr;
  51. }
  52.  
  53. //Gibt den Wert am Index zurück
  54. int& DynArray::at(int index) {
  55. if (index < 0){
  56. throw std::invalid_argument("Index cant be lower than 0");
  57. }
  58. if (index >= siz-1 ){
  59. throw std::invalid_argument("Index cant be lower than 0");
  60. }
  61. return arr[index];
  62. }
  63.  
  64. //Gibt die Größe zurück
  65. int DynArray::size() {
  66. return siz;
  67. }
  68.  
  69. //Gibt die Capacity zurück
  70. int const DynArray::capacity() {
  71. return cap;
  72. }
  73.  
  74. void DynArray::print() {
  75. for (int i = 0; i < siz; i++) {
  76. std::cout << arr[i] << ' ';
  77. }
  78. std::cout << std::endl;
  79. }
  80.  
  81. void DynArray::push_back(int value){
  82. //Verdoppelt Kapazität wenn Size = Cap und erstellt neues temporäres Array.
  83. if (siz == cap){
  84. cap *= 2;
  85. int* tmp = new int[cap];
  86. //Werte in tmp Kopieren
  87. for (int i = 0; i < siz; i++){
  88. tmp[i] = arr[i];
  89. }
  90. //Arr löschen und den Zeiger auf tmp setzen
  91. delete[] arr;
  92. arr = tmp;
  93. arr[siz] = value;
  94. siz++;
  95. }
  96. //Fügt den Wert an wenn noch genug Capacity da ist
  97. else{
  98. arr[siz] = value;
  99. siz++;
  100. }
  101. }
  102.  
  103. void DynArray::pop_back() {
  104. //Die größer um 1 verringern ist quasi als ob man das letzte Element löscht.
  105. if (siz < 1){
  106. throw std::runtime_error("Size can't be lower than 1");
  107. }
  108. siz--;
  109. }
  110.  
  111. //Kopiert die Elemente die über Index liegen 1 nach vorne und setzt verringert siz um 1
  112. void DynArray::erase(int index) {
  113. if (index < 0){
  114. throw std::invalid_argument("Index can't be lower than 0");
  115. }
  116. for (int i = index; i < siz; i++) {
  117. arr[i] = arr[i + 1];
  118. }
  119. siz--;
  120. }
  121.  
  122. //Wendet f auf alle arr an für alle Elemente < siz
  123. void DynArray::apply(std::function<void(int&)> f) {
  124. for (int i = 0; i < siz; i++) {
  125. f(arr[i]);
  126. }
  127. }
  128.  
  129. //Erstellt ein temporäres arr und wendet f auf alle Elemente < siz des tmp Arrs an
  130. DynArray DynArray::transform(std::function<int(int)> f){
  131. DynArray tmp(siz);
  132. for (int i = 0; i < siz; i++) {
  133. tmp.at(i) = f(arr[i]);
  134. }
  135.  
  136. return tmp;
  137.  
  138. }
  139.  
  140. //Std::Sort auf das Arr
  141. void DynArray::sort(){
  142. std::sort(arr, arr + siz);
  143. }
  144.  
  145. //Std::Sort auf das Arr mit Comp Funktion
  146. void DynArray::sort(std::function<bool(int, int)> comp){
  147. std::sort(arr, arr + siz, comp);
  148. }
  149.  
  150.  
  151.  
  152. ////Hfile
  153.  
  154. //
  155. // DynArray.h
  156. // pad6
  157. //
  158. // Created by Marvin Eifler on 16.01.20.
  159. //
  160.  
  161. #include <functional>
  162. #ifndef DynArray_h
  163. #define DynArray_h
  164. class DynArray {
  165. public:
  166. DynArray();
  167. DynArray(int size);
  168. DynArray(const DynArray &toCopy);
  169. ~DynArray();
  170. int& at(int index);
  171. int size();
  172. int const capacity();
  173. void print();
  174. void push_back(int value);
  175. void pop_back();
  176. void erase(int index);
  177. void apply(std::function<void(int&)> f);
  178. DynArray transform(std::function<int(int)> f);
  179. void sort();
  180. void sort(std::function<bool(int, int)> comp);
  181.  
  182. private:
  183. int cap;
  184. int siz;
  185. int* arr;
  186. };
  187.  
  188. #endif /* DynArray_h */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement