2014-06-05 27 views
0

我想知道如何獲得一堆特定值(/堆棧?對不起,我是法國人:P)。我必須將堆的頂點卸下,使其成爲一個整數並獲得堆的[頂點 - int]值,以便我可以將其作爲新的頂點。如何獲得一堆特定的價值? (C++)

感謝您的幫助:)

(下面是一個例子,將可能更清楚:

例如,具有樁[1 2 3 4 5 2](其中,峯會上右邊),指令將會彈出堆棧[1 2 3 4 5],然後複製值爲3的數值3,它是從右邊第二個數字開始,然後從0開始,然後堆疊它,最後一疊[1 2 3 4 5 3]。)

+0

法語*一堆*確實是一個堆棧。最近的值通常被簡單地稱爲__top__(而不是*高峯*)。添加到堆棧通常被稱爲__push__,並將其作爲__pop__(而不是unpack)移除。 – Taum

回答

1

嘗試std::vector<int>。它似乎是爲你正在做的事精心設計的。 使用back()獲取堆棧頂部的值,然後pop_back()將其刪除。 使用stack[n]獲得stack的第n個元素的副本。

+2

'pop_back()'確實刪除了最後一個值,但它什麼也沒有返回。爲了獲得最後的值,你必須首先調用'back()',它只是檢查值,然後'pop_back()'實際刪除它。 – CoryKramer

+1

你有沒有試過'std :: stack []'? – ChiefTwoPencils

+0

當我第一次寫回答時,我肯定一直在想一些其他的'pop()'函數。我糾正了錯誤。我不知道如何複製「top」元素以外的「std :: stack」元素。 –

1

看起來像數據結構可能不是最好的,如果你要通過索引經常訪問它。

你可以,如果你正在使用Visual Studio和Microsoft C++實現做如果,只有可能什麼,你需要做的場合,你能告訴std::stack使用向量作爲一個容器,與默認std::deque相反,並使用_Get_container()訪問它。 std::vector允許索引訪問。這是一個將打印我的堆棧中第一個元素的示例。

#include <string> 
#include <stack> 
#include <iostream> 
#include <vector> 

int main(void) { 
    std::stack<std::string, std::vector<std::string> >stringStack; 
    stringStack.push("Hello"); 
    stringStack.push("World"); 
    std::cout << stringStack._Get_container()[0]; 
} 

Output: Hello

+0

不是一個好的解決方案。誰說實現提供了一個'_Get_container'方法呢?但是,如果需要索引,則說明堆棧是錯誤的數據結構。 –

+0

@ChristianHackl:優點!我一直在使用VS太多。 – ChiefTwoPencils

+0

您可能想要編輯您的答案並提及它取決於VC實施細節。 –