Advertisement
TwITe

Untitled

Jul 10th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <cassert>
  3.  
  4. using namespace std;
  5.  
  6. //Указатель, который используется для хранения адреса памяти под массив.
  7. int* buffer;
  8.  
  9. //Текущее колличество элементво в массиве.
  10. unsigned array_size;
  11.  
  12. //Максимальное количество элементов в массиве.
  13. unsigned capacity;
  14.  
  15. //Инициализация массива.
  16. //Выполняется один раз перед тем, как будет использоваться массив.
  17. void init_array() {
  18.     capacity = 2000;
  19.     buffer = new int[capacity];
  20. }
  21.  
  22. //Освобождение ресурсов массива.
  23. //Выполняется один раз перед тем, как массив прекратит использоваться.
  24. void destroy_array() {
  25.     delete[] buffer;
  26.     buffer = nullptr;
  27.     capacity = 0;
  28. }
  29.  
  30. //Добавление нового элемента в массив.
  31. void add_element(const int& element)
  32. {
  33.  
  34.     for (int i = element; i < capacity; i++) {
  35.         if (i > element) {
  36.             break;
  37.         }
  38.         else {
  39.             buffer[i] = element;
  40.         }
  41.     }
  42. }
  43.  
  44. //Получить значение элемента по его индексу.
  45. //Если индекс некорректный (меньше 0, или слишком большой) - нужно кинуть исключение
  46. // (я показываю в примере ниже, как это делать).
  47. const int& get_element(const unsigned& index) {
  48.     if (index < 0 || index > capacity) {
  49.         throw std::runtime_error("index is invalid");
  50.     }
  51.     else {
  52.         return buffer[index];
  53.     }
  54. }
  55.  
  56. //Следующие тесты должны выполняться (программа должна успешно запускаться).
  57. //Менять тесты нельзя.
  58. //Менять мои заглушки на функции нельзя.
  59.  
  60. void check_preconditions() {
  61.     assert(array_size == 0);
  62.     assert(capacity == 0);
  63.     assert(buffer == nullptr);
  64. }
  65.  
  66. void can_init_and_destroy_new_array_test() {
  67.     init_array();
  68.     destroy_array();
  69.     check_preconditions();
  70. }
  71.  
  72. void can_add_elements_to_array_test() {
  73.     init_array();
  74.  
  75.     for (int i = 0; i < 2000; ++i) {
  76.         add_element(i);
  77.     }
  78.  
  79.     for (int i = 0; i < 2000; ++i) {
  80.         int current_element = get_element(i);
  81.         assert(current_element == i);
  82.     }
  83.  
  84.     destroy_array();
  85.     check_preconditions();
  86. }
  87.  
  88. int main()
  89. {
  90.     can_init_and_destroy_new_array_test();
  91.     can_add_elements_to_array_test();
  92.  
  93.     system("PAUSE");
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement