双端队列,将前面的元素推到后面的c++

deque, pushing the front element to the back c++

我现在正在练习使用数据结构。我有一个问题,如果我想交换双端队列中的第一个和最后一个元素,我可以写 deque.push_back(pop_front()) 吗?

不,对不起,你不能。
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()复杂得多。

当然,对于所有这些,你必须确保有足够的 双端队列中的元素:至少一个用于 std::swap() 解决方案, push/pop 解决方案至少有两个。