Передача ссылки на функцию удаления deque

Мне дали задание, и я изо всех сил пытаюсь понять, как я должен его выполнить.

Я вставил части задания, которые озадачили меня ниже

  1. Напишите класс deque для хранения списка целых чисел, который реализован внутри с помощью циклического массива. Размер массива может быть передан в конструкторе, или вы можете выбрать значение по умолчанию. Класс будет поддерживать элементы данных, которые содержат индексную позицию заголовка и хвоста списка
    Класс должен иметь функции-члены:
    • bool isEmpty ();
    • bool isFull ();
    • bool insertFront (int)
    • bool removeFront (int&)
    • bool insertBack (int)
    • bool removeBack (int&)

  2. печатает все элементы в массиве, удаляя их по одному спереди.

Итак, я написал все свои функции и у меня работает deque, с чем я боролся:

  1. «Размер массива может быть передан в конструкторе», поэтому для этого я объявил указатель с именем array в своем классе, а затем в своем конструкторе array = new int [size], это единственный способ сделать это, я ‘ Я достаточно счастлив, что это работает, но не уверен, что есть лучшее решение. Я думал о векторе, но думаю, что это было бы слишком просто. Я также мог бы объявить const для размера и инициализировать массив в моем классе, но опять-таки легко.

  2. bool removeFront(int&) а также bool removeBack(int&) функции действительно смутили меня, какую ссылку я должен передавать? также тип возвращаемого значения — bool, но позже в задании меня попросили «распечатать все элементы в массиве, удаляя их по одному спереди», как я могу сделать это с возвращаемым типом bool, а не с int ?

Я изменил свои функции, чтобы удалить ссылку и вернуть тип int, чтобы заставить код работать, но хотел бы знать, как реализовать его так, как требует присваивание?

0

Решение

Исходя из перечисленных требований, назначение аргументов функции однозначно. Вот почему:

принимать

bool removeFront(int& );

Это не только удаляет элемент в начале буфера и сохраняет его в аргументе, передаваемом по ссылке. Но функция возвращает «bool», указывающее, удалось ли ей успешно удалить или нет.

Пример использования будет выглядеть так:

int elem;
while (removeFront(elem)) {
printf("element : %d ", elem);
}

Здесь переменная «elem» передается по ссылке. Следовательно, после успешного выполнения removeFront () вам будет заполнен элемент с только что удаленным значением элемента.

То же самое относится и к другим аналогичным методам. Пожалуйста, вернитесь к использованию параметра эталонного режима, как указано в первоначальной спецификации.

Инт& аргумент не для количества элементов, как предложил другой ответ.

Ответ на часть-1:

Ваше решение довольно приличное. Вы могли бы также

std :: массив для хранения элементов. Существует продвинутый прием для размещения на месте массива переменной длины, но это выходит за рамки этого вопроса.

1

Другие решения

«Размер массива можно передать в конструктор»

Если вам не сказали иначе, используйте вектор. Использование массивов старой школы просто напрашивается на неприятности.

«Bool removeFront (int&) «and» bool removeBack (int&) функции действительно смутили меня, какую ссылку я должен передавать?

Это вопрос личных предпочтений, но передача единственного int в качестве ссылки может быть довольно ненужной, поскольку функции (если я правильно понял вашу проблему) — это удаление элемента массива, который находится в позиции вашего int. передавая в качестве аргумента. Если указанный элемент удален правильно, вы можете вернуть значение true, в противном случае вернуть значение false.

РЕДАКТИРОВАТЬ: После прочтения поста, что функции могут сделать, это просто удалить количество «int» элементов из передней или задней части массива. Возвращаемые значения должны работать как указано ранее

но позже в задании меня попросили «распечатать все элементы в массиве, удаляя их по одному с лицевой стороны», как я могу сделать это с возвращаемым типом bool, а не с int?

Тип возврата функции не имеет к этому никакого отношения (если только вас не попросили сделать это рекурсивно). Просто выполните цикл, который начинается в начале массива и выводит его содержимое, удаляет тот же элемент, затем переходит к следующему и повторяет процесс до тех пор, пока он не выйдет из элементов. Опять же, это гораздо безопаснее делать с любым из контейнеров STL, так как вы можете использовать итераторы.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector