Мне дали задание, и я изо всех сил пытаюсь понять, как я должен его реализовывать.
Я вставил части задания, которые озадачили меня ниже
Напишите класс deque для хранения списка целых чисел, который реализован внутри с круговым массивом. Размер массива может быть передан в конструкторе или вы можете выбрать значение по умолчанию. Класс будет поддерживать элементы данных, которые содержат индексную позицию головы и хвоста списка. Класс должен иметь функции-члены:
• bool isEmpty();
• bool isFull();
• bool insertFront (int)
• bool removeFront (int &)
• bool insertBack (int)
• bool removeBack (int &)
печатает все элементы в массиве, удаляя их по одному с фронта.
Поэтому я написал все свои функции и работал над deque, с которыми я боролся:
"Размер массива может быть передан в конструкторе", поэтому для выполнения этого я объявил указатель, называемый массивом в моем классе, а затем array = new int [size] в моем конструкторе, это единственный способ сделать это, m достаточно счастлив, что работает, но не уверен, есть ли лучшее решение. Я думал о векторе, но думаю, что это было бы слишком легко. Я также мог объявить 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() у вас будет заполнен элемент elem со значением только что удаляемого элемента.
Те же рассуждения применимы и к другим аналогичным методам. Пожалуйста, вернитесь к использованию параметра эталонного режима, как указано в первоначальной спецификации.
Int & аргумент не для количества элементов, как предложил другой ответ.
Ответ на часть-1:
Ваше решение довольно приличное. Вы также можете
std :: array для хранения элементов. Существует продвинутый трюк для размещения на месте массива переменной длины - но это выходит за рамки этого вопроса.
"Размер массива может быть передан в конструкторе"
Если вам не сказали иначе, используйте вектор. Использование старых школьных массивов просто требует неприятностей.
Функции "bool removeFront (int &)" и "bool removeBack (int &)" действительно путают меня, какую ссылку я должен пройти?
Это вопрос личных предпочтений, но передача в одном int в качестве ссылки может быть совершенно ненужной, что делают функции (если я правильно понял вашу проблему) - удалить элемент массива, который находится в позиции int, вы проходящий как аргумент. Если указанный элемент правильно удален, вы можете захотеть вернуть истинное значение, в противном случае вернуть false.
EDIT: после повторного чтения сообщения функции, которые могут выполнять функции, просто удаляют количество элементов "int" из передней или задней части массива. Возвращаемые значения должны работать как указано ранее
но позже в задании мне предлагается "распечатать все элементы в массиве, удалив их по одному с фронта", как я могу сделать это с помощью возвращаемого типа bool, а не int?
Тип возврата функции не имеет к этому никакого отношения (если только вас не попросили сделать это рекурсивно). Просто сделайте цикл, который начинается в начале массива и выводит его содержимое, удаляет тот же самый элемент, затем переходит к следующему и повторяет процесс до его отсутствия. Опять же, это намного безопаснее делать с любым из STL-контейнеров, поскольку вы можете использовать итераторы.