【问题标题】:Deque Implementation双端队列实现
【发布时间】:2013-03-10 08:03:23
【问题描述】:

我对我在 Internet 上找到的代码有疑问,该代码使用双端队列来查找元素的最大值 --

 #include <iostream>
 #include <deque>

 using namespace std;


 void test(int arr[], int n)
 {    
   std::deque<int>  Qi(n); 
   int i;
   for (i = 0; i < n; ++i)
   {
      while ( (!Qi.empty()) && arr[i] >= arr[Qi.back()])
        Qi.pop_back();  // Remove from rear

      Qi.push_back(i);
   }
  cout << arr[Qi.front()];   
}

// Driver program to test above functions
int main()
{
   int arr[] = {12, 1, 78, 90, 57, 89, 56};
   int n = sizeof(arr)/sizeof(arr[0]);    
   test(arr, n);
   return 0;
}

我的问题是当我没有做任何 Qi.push_front() 时 Qi.front() 如何给出正确的索引?

但是下面的代码给了我一个 0

  void test(int arr[], int n)
 {    
   std::deque<int>  Qi(n); 
   int i;
   for (i = 0; i < n; ++i)
   {           
      Qi.push_back(i);
   }
   cout << arr[Qi.front()];   
}

对不起,如果我听起来很愚蠢.. deques 新手...

谢谢

【问题讨论】:

  • 这是一种复杂的方式来完成这项任务。您实际上可以用 std::vector 替换 std::deque ,它仍然可以以相同的方式工作并且会更有效(但仍然会令人费解)。您只需要一个 int 即可找到最大的元素或一个索引。

标签: c++ data-structures stl deque


【解决方案1】:

std::deque&lt;int&gt; Qi(n); 创建一个带有n 元素的双端队列,所有元素都为零。 push_back 操作在后面添加更多元素,因此之后双端队列具有 2 * n 元素。 Qi.front()Qi[0] 相同。

所有这些都有据可查,例如here.

【讨论】:

  • 你确定这个:“所以之后双端队列有 2 * n 个元素”?
  • 啊...非常感谢...所以基本上使用 std::deque Qi;然后执行 push_back(10) 给出与 front() 相同的值。非常感谢您的澄清。
猜你喜欢
  • 2016-08-18
  • 2016-01-02
  • 2011-08-09
  • 1970-01-01
  • 2018-07-02
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多