2015-03-02 37 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的第二个元素有效。