Main.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. //Лабораторная работа №3
  2. //
  3. //initializer_list, move, default, delete, move итераторы
  4. #include "MyQueue.h"
  5. #include "myString.h"
  6. //using namespace std;
  7. int main()
  8. {
  9. //Задание.Разработайте класс, который реализует функциональность очереди с элементами любого типа.
  10. //Данные требуется хранить в динамическом массиве, при этом использовать массив как циклический буфер.
  11. // Пояснение: так как очередь – это специфическая структура данных, для которой новые данные помещаются в конец,
  12. // а «старые» данные изымаются из начала очереди = > если последний элемент массива задействован,
  13. // то начало скорее всего уже освободилось = > «закольцовываем» буфер, продолжая заполнять
  14. // с нулевого элемента.
  15. //Несмотря на указанную специфичность такой структуры данных, могут возникать ситуации,
  16. // когда пользователь вызвал push(), а свободных элементов в очереди не осталось = > при необходимости массив следует «расширять».
  17. //При реализации нужно обеспечить эффективную работу с динамической памятью = >
  18. //• предусмотреть наличие резервных элементов
  19. //• память без очевидной необходимости не перераспределять
  20. //Внимание!
  21. //1. Очередь реализуем без использования «сырой памяти»!А эффективность достигаем за счет использования move - семантики
  22. //2. Очередь выводим на печать с помощью range - base - for
  23. //Тестируем разработанный класс на приведенном ниже фрагменте.
  24. //Следующий фрагмент должен работать не только корректно, но и эффективно :
  25. //
  26. MyQueue<MyString> q1{ MyString("AAA"), MyString("qwerty"), MyString("Hi") /*<другие_инициализаторы> */};
  27. q1.print();
  28. ////использование MyQueue в диапазонном for:
  29. for (const auto& el : q1) { std::cout << el << ' '; } cout << endl << endl;
  30. //
  31. MyString s("abc");
  32. q1.push(s);
  33. q1.push(MyString("123"));
  34. MyString s1 = q1.pop();
  35. q1.print();
  36. q1.push("qqq");//q1.push("qqq");
  37. q1.print();
  38. MyQueue < MyString > q2 = q1;
  39. q2.print();
  40. MyQueue < MyString > q22 = std::move(q1);
  41. q1.print(); cout << endl;
  42. q22.print();
  43. MyQueue < MyString > q3{ 10, MyString("!") }; //очередь должна содержать 10 элементов со строкой «!»
  44. q3.print();
  45. q1 = q3;
  46. q1.print();
  47. q2 = MyQueue < MyString >(5, MyString(" ? "));
  48. q2.print();
  49. q1 = { MyString("bbb"), MyString("ssss") };
  50. return 0;
  51. }