堆栈的数组用法(参数传递/返回)

时间:2015-03-02 15:18:44

标签: c++

我必须处理几个需要作为数组堆栈参数的函数。

这是一个例子:

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]合法吗?

2 个答案:

答案 0 :(得分:1)

  

这是对的吗?我的意思是,我可以这样分配并返回堆栈中的元素吗?

现在你已经改变了匹配的类型,是的。这将在堆栈顶部返回数组的副本(而不是引用)。

在最初的问题中,没有;因为我相信你的编译器会说。 short数组(top()给你)和int数组之间没有隐式转换(你尝试将其分配给它)。您可以按值或引用返回相同的数组类型;如果由于某种原因需要更改类型,请写一点转换函数。

  

这是对的吗? sol[0]=lifo;

没有;再次,编译器应该告诉你。您正尝试将stack分配给array。将dmat的类型更改为vector<lifo>,您可以将lifo复制到其中。

  

这种语法pila.top()[1]合法吗?

是的,这使得数组的第二个元素位于堆栈顶部。 top()返回对该数组的引用,[1]可以索引。

答案 1 :(得分:0)

不,这是无效的,因为array2decltype(pila.top())的类型不同:array<short,2>无法隐式转换为array<int,2>。如果您更改array2的类型,那么您的程序将在语义上正确。

不,sol[0] = lifo无效,因为您尝试将stack分配给array

是的,pila.top()[1]会返回array顶部stack的第二个元素。