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

0

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

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

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

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

Поэтому я написал все свои функции и работал над deque, с которыми я боролся:

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

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

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

Теги:
circular-buffer
deque

2 ответа

1
Лучший ответ

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

принимать

bool removeFront(int& );

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

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

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

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

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

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

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

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

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

  • 0
    Имеет смысл сейчас, я изменил свой код соответственно. Я достаточно счастлив, чтобы пока не углубляться в std :: array.
0

"Размер массива может быть передан в конструкторе"

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

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

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

EDIT: после повторного чтения сообщения функции, которые могут выполнять функции, просто удаляют количество элементов "int" из передней или задней части массива. Возвращаемые значения должны работать как указано ранее

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

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

  • 0
    Я считаю, что это предложение не идет в правильном направлении. Это не должно быть количество элементов, которые будут удалены из очереди вообще. Пожалуйста, проверьте ответ.
  • 0
    «печатает все элементы в массиве, удаляя их по одному»
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню