【问题标题】:deque, pushing the front element to the back c++双端队列,将前面的元素推到后面 C++
【发布时间】:2020-07-31 09:33:01
【问题描述】:

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

【问题讨论】:

  • 当你尝试这个时会发生什么?它编译吗?它运行了吗?
  • 你试过了吗?你检查过pop_back() 返回的内容吗?
  • pop_back() 没有对象,因此此代码无法编译。此外,pop_back() 返回双端队列中的最后一个元素,而不是第一个。请改用std::swap

标签: c++ swap deque


【解决方案1】:

不,你不能,对不起。
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 解决方案至少有两个。

【讨论】:

  • 正确的成员函数是back(),而不是last()
  • 对不起,我答错了,不是push_back(pop_back())而是push_back(pop_front())
  • @PaulMcKenzie 感谢您注意到错误。我忙于与英语作斗争,以至于我没有像应有的那样专注于代码……对此感到抱歉。
猜你喜欢
  • 2020-04-24
  • 2019-01-02
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
相关资源
最近更新 更多