Deque实施

时间:2013-03-20 23:44:28

标签: c++ data-structures stl deque

我对我在互联网上找到的代码有疑问,该代码使用deque来查找元素的最大值 -

 #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 ......

由于

1 个答案:

答案 0 :(得分:3)

std::deque<int> Qi(n);创建一个带有n元素的双端队列,全部为零。 push_back操作在后面添加了更多元素,因此deque后面有2 * n个元素。 Qi.front()Qi[0]相同。

所有这些都有详细记载,例如: here