2015-03-02 69 views
0

我必須處理幾個函數,這些函數需要作爲參數堆棧的數組。數組的使用堆棧(參數傳遞/返回)

這是例子:

using namespace std; 

typedef vector<array<array<short,2>,64>> dmat; 
typedef stack<array<short,2>> lifo; 
typedef array<short,2> array2; 

    array2 posible(lifo& pila, int j){ // Gets the stack by reference 
        array2 ret=pila.top(); 
        return ret;  
    } 

的問題是:

  • 這是正確的嗎?我的意思是,我可以用這種方式分配和返回堆棧中的元素嗎?
  • 假設我宣佈了dmat sol,並且我想將堆棧pila複製到vector sol中的第一個元素。它是否正確? sol[0]=lifo;
  • 此語法pila.top()[1]合法嗎?
+0

'array '(你的'lifo')和'array '(你的'array2')之間很可能沒有隱式轉換。所以,不,這不起作用。但是,那麼,如果你試圖編譯它,你的編譯器會向你解釋... – twalberg 2015-03-02 15:33:19

回答

1

這是正確的嗎?我的意思是,我可以用這種方式分配和返回堆棧中的元素嗎?

現在你已經改變了匹配類型,是的。這將返回堆棧頂部數組的副本(不是引用)。

在原始問題中,不;因爲我確定你的編譯器會說。在short(其中top()爲您提供)和int(您嘗試將其分配給)數組之間沒有隱式轉換。您可以按值或引用返回相同的數組類型;或者如果由於某種原因需要更改類型,請編寫一點轉換函數。

這是正確的嗎? sol[0]=lifo;

不;再次,編譯器應該告訴你。您正試圖將stack分配給array。將dmat的類型更改爲vector<lifo>,並且您可以將lifo複製到其中。

此語法pila.top()[1]合法嗎?

是的,它給出了堆棧頂部數組的第二個元素。 top()返回對該數組的引用,其中[1]可以索引。

+0

是的,對不起,這些類型的錯誤是由於在這裏複製部分代碼。糾正。 – D1X 2015-03-02 15:37:58

0

不,這是無效的,因爲array2decltype(pila.top())的類型是不同的:array<short,2>不能隱式轉換爲array<int,2>。如果您更改了array2的類型,那麼您的程序在語義上將是正確的。

沒有,sol[0] = lifo並不像你想分配stackarray

是,pila.top()[1]stack頂部返回array的第二個元素有效。