Мне дали задание, и я изо всех сил пытаюсь понять, как я должен его выполнить.
Я вставил части задания, которые озадачили меня ниже
Напишите класс deque для хранения списка целых чисел, который реализован внутри с помощью циклического массива. Размер массива может быть передан в конструкторе, или вы можете выбрать значение по умолчанию. Класс будет поддерживать элементы данных, которые содержат индексную позицию заголовка и хвоста списка
Класс должен иметь функции-члены:
• bool isEmpty ();
• bool isFull ();
• bool insertFront (int)
• bool removeFront (int&)
• bool insertBack (int)
• bool removeBack (int&)
печатает все элементы в массиве, удаляя их по одному спереди.
Итак, я написал все свои функции и у меня работает deque, с чем я боролся:
«Размер массива может быть передан в конструкторе», поэтому для этого я объявил указатель с именем array в своем классе, а затем в своем конструкторе array = new int [size], это единственный способ сделать это, я ‘ Я достаточно счастлив, что это работает, но не уверен, что есть лучшее решение. Я думал о векторе, но думаю, что это было бы слишком просто. Я также мог бы объявить const для размера и инициализировать массив в моем классе, но опять-таки легко.
bool removeFront(int&)
а также bool removeBack(int&)
функции действительно смутили меня, какую ссылку я должен передавать? также тип возвращаемого значения — bool, но позже в задании меня попросили «распечатать все элементы в массиве, удаляя их по одному спереди», как я могу сделать это с возвращаемым типом bool, а не с int ?
Я изменил свои функции, чтобы удалить ссылку и вернуть тип int, чтобы заставить код работать, но хотел бы знать, как реализовать его так, как требует присваивание?
Исходя из перечисленных требований, назначение аргументов функции однозначно. Вот почему:
принимать
bool removeFront(int& );
Это не только удаляет элемент в начале буфера и сохраняет его в аргументе, передаваемом по ссылке. Но функция возвращает «bool», указывающее, удалось ли ей успешно удалить или нет.
Пример использования будет выглядеть так:
int elem;
while (removeFront(elem)) {
printf("element : %d ", elem);
}
Здесь переменная «elem» передается по ссылке. Следовательно, после успешного выполнения removeFront () вам будет заполнен элемент с только что удаленным значением элемента.
То же самое относится и к другим аналогичным методам. Пожалуйста, вернитесь к использованию параметра эталонного режима, как указано в первоначальной спецификации.
Инт& аргумент не для количества элементов, как предложил другой ответ.
Ответ на часть-1:
Ваше решение довольно приличное. Вы могли бы также
std :: массив для хранения элементов. Существует продвинутый прием для размещения на месте массива переменной длины, но это выходит за рамки этого вопроса.
«Размер массива можно передать в конструктор»
Если вам не сказали иначе, используйте вектор. Использование массивов старой школы просто напрашивается на неприятности.
«Bool removeFront (int&) «and» bool removeBack (int&) функции действительно смутили меня, какую ссылку я должен передавать?
Это вопрос личных предпочтений, но передача единственного int в качестве ссылки может быть довольно ненужной, поскольку функции (если я правильно понял вашу проблему) — это удаление элемента массива, который находится в позиции вашего int. передавая в качестве аргумента. Если указанный элемент удален правильно, вы можете вернуть значение true, в противном случае вернуть значение false.
РЕДАКТИРОВАТЬ: После прочтения поста, что функции могут сделать, это просто удалить количество «int» элементов из передней или задней части массива. Возвращаемые значения должны работать как указано ранее
но позже в задании меня попросили «распечатать все элементы в массиве, удаляя их по одному с лицевой стороны», как я могу сделать это с возвращаемым типом bool, а не с int?
Тип возврата функции не имеет к этому никакого отношения (если только вас не попросили сделать это рекурсивно). Просто выполните цикл, который начинается в начале массива и выводит его содержимое, удаляет тот же элемент, затем переходит к следующему и повторяет процесс до тех пор, пока он не выйдет из элементов. Опять же, это гораздо безопаснее делать с любым из контейнеров STL, так как вы можете использовать итераторы.