Вопрос довольно простой, как распечатать дек, но сзади. Пример: у меня есть двухсторонняя очередь с элементами {5,4,3,2,1}. Я хочу напечатать эту двухстороннюю очередь, но начиная с последнего элемента, поэтому на моем экране должно быть что-то вроде 1 2 3 4 5.
Обычный шлейф for(int i(deque.size()); i > 0; i--) явно не работает.
Небольшое вступление к программе. Он находит числа, сумма которых четная или нечетная, и сортирует их на две разные дека, которые должны быть напечатаны на экране.
Это код, который работает для «обычной» печати. Но моя задача - напечатать их задом наперед.
Да, и элементы добавляются в двухстороннюю очередь с помощью функции push_front. И нет, мне не разрешено использовать push_back, чтобы «исправить» это.
void PrintDek(Dek v4) {
for (int i(0); i < v4.size(); i++) {
std::cout << v4[i];
if (i != v4.size() - 1) std::cout << ",";
}
}
Если кому-то из вас нужен код всей программы, я отредактирую свой пост.
почему for(int i(deque.size()); i > 0; i--) не работает?
Недостаток сна или просто незнание, это должен был быть deque.size()-1, и он бы сработал. Это на самом деле исправило это.





Вы можете использовать обратные итераторы. См. http://en.cppreference.com/w/cpp/container/deque/rbegin.
for(auto iter = deque.rbegin(); iter != deque.rend(); ++iter) {
// do stuff
}
Как мне печатать так, как я использовал выше, как deque[i]. Я получаю это сообщение об ошибке Код серьезности Описание Ошибка состояния подавления строки файла проекта (активный) E0349 ни один оператор "[]" не соответствует этим операндам Zadatak 4 c: \ Users \ HARI 256 SSD 8GB \ Documents \ TP Tutorijali \ Tutorijal 3 \ Zadatak 4 \ Задатак 4 \ Задатак 4.cpp 55
@Rose Print *iter.
@Rose При использовании итераторов вызовите перегруженный оператор *, чтобы получить значение. В вашем случае сделайте std::cout << *iter;. Об итераторах читайте на en.cppreference.com/w/cpp/concept/Iterator.
Итак, увидев свой код после нескольких часов сна (этот вопрос был отправлен после 2 часов ночи по моему часовому поясу), я понял, в чем была моя ошибка. Используя deque.size() и двигаясь полностью до значения, которое возвращает функция size(), я фактически выходил за пределы диапазона, получая доступ к запрещенным частям памяти.
Простой deque.size()-1 теперь работает. Таким образом, цикл будет выглядеть так: for(int i(deque.size()-1); i >= 0; i--).
Пожалуйста, покажите свою попытку и то, как она не работает.