2013-03-20 66 views
1

我有一個關於我在互聯網上找到的代碼,它使用一個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.front()時給予正確的索引我還沒有做過任何Qi.push_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()]; 
} 

很抱歉,如果我聽起來愚蠢的。新來雙端...

感謝

+0

這是一個複雜的方式來完成這項任務。你實際上可以用std :: vector來替換std :: deque,它仍然可以以相同的方式工作,並且會更加有效(但仍然是複雜的)。你只需要一個int來找到最大元素或一個索引。 – Slava 2013-03-21 00:00:09

回答

3

std::deque<int> Qi(n);創建一個雙端隊列n元素,全部爲零。 push_back操作在後面添加了更多元素,因此後來該元素有2 * n元素。 Qi.front()Qi[0]相同。

所有這些都有很好的記錄,例如, here

+0

你確定這個:「所以後來deque有2 * n個元素」? – Slava 2013-03-20 23:49:42

+0

啊......非常感謝...所以基本上使用std :: deque Qi;然後做一個push_back(10)給出與front()相同的值。非常感謝您的澄清。 – Fox 2013-03-20 23:51:22