deque, толкая передний элемент назад c ++ - PullRequest
0 голосов
/ 17 апреля 2020

Сейчас я тренируюсь в работе со структурами данных. И у меня есть один вопрос, могу ли я написать deque.push_back(pop_front()), если я хочу поменять местами первый и последний элемент в deque?

1 Ответ

2 голосов
/ 17 апреля 2020

Нет, вы не можете, извините.
pop_back() не имеет результата (void), поэтому его нельзя использовать в качестве параметра для push_back().

(https://en.cppreference.com/w/cpp/container/deque/pop_back). )

Может быть лучше вызвать back() и сохранить результат в переменной; затем вызовите pop_back().
Повторите ту же процедуру со второй переменной, а затем дважды вызовите push_back() с первой и второй переменной.


ах?!?! вопрос только что изменился.

Проблема та же, что и у pop_front(), который имеет void результат.

Чтобы поменять местами первый и последний элемент, вы можете использовать std::swap(deque.front(), deque.back()).

Если вы абсолютно хотите использовать push/pop функции, тогда:

  • используйте back() и запомните значение в первой переменной
  • используйте pop_back(),
  • используйте front() и запишите значение во вторую переменную,
  • используйте pop_front(),
  • используйте push_front() с первой переменной ,
  • используйте push_back() со второй переменной,

, но это решение намного сложнее, чем std::swap().

Конечно, для всего этого , вы должны убедиться, что в deque достаточно элементов: как минимум один для решения std::swap(), как минимум два для решения push/pop.

...