123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //Лабораторная работа №3
- //
- //initializer_list, move, default, delete, move итераторы
- #include "MyQueue.h"
- #include "myString.h"
- //using namespace std;
- int main()
- {
- //Задание.Разработайте класс, который реализует функциональность очереди с элементами любого типа.
- //Данные требуется хранить в динамическом массиве, при этом использовать массив как циклический буфер.
- // Пояснение: так как очередь – это специфическая структура данных, для которой новые данные помещаются в конец,
- // а «старые» данные изымаются из начала очереди = > если последний элемент массива задействован,
- // то начало скорее всего уже освободилось = > «закольцовываем» буфер, продолжая заполнять
- // с нулевого элемента.
- //Несмотря на указанную специфичность такой структуры данных, могут возникать ситуации,
- // когда пользователь вызвал push(), а свободных элементов в очереди не осталось = > при необходимости массив следует «расширять».
- //При реализации нужно обеспечить эффективную работу с динамической памятью = >
- //• предусмотреть наличие резервных элементов
- //• память без очевидной необходимости не перераспределять
- //Внимание!
- //1. Очередь реализуем без использования «сырой памяти»!А эффективность достигаем за счет использования move - семантики
- //2. Очередь выводим на печать с помощью range - base - for
- //Тестируем разработанный класс на приведенном ниже фрагменте.
- //Следующий фрагмент должен работать не только корректно, но и эффективно :
- //
- MyQueue<MyString> q1{ MyString("AAA"), MyString("qwerty"), MyString("Hi") /*<другие_инициализаторы> */};
- q1.print();
- ////использование MyQueue в диапазонном for:
- for (const auto& el : q1) { std::cout << el << ' '; } cout << endl << endl;
- //
- MyString s("abc");
- q1.push(s);
- q1.push(MyString("123"));
- MyString s1 = q1.pop();
- q1.print();
- q1.push("qqq");//q1.push("qqq");
- q1.print();
- MyQueue < MyString > q2 = q1;
- q2.print();
- MyQueue < MyString > q22 = std::move(q1);
- q1.print(); cout << endl;
- q22.print();
- MyQueue < MyString > q3{ 10, MyString("!") }; //очередь должна содержать 10 элементов со строкой «!»
- q3.print();
- q1 = q3;
- q1.print();
- q2 = MyQueue < MyString >(5, MyString(" ? "));
- q2.print();
- q1 = { MyString("bbb"), MyString("ssss") };
-
- return 0;
- }
|