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



我必须处理几个函数,这些函数需要将数组堆栈作为参数。

这是一个例子:

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复制到向量sol中的第一个元素。这是正确的吗?sol[0]=lifo;
  • 此语法pila.top()[1]合法吗

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

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

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

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

否;同样,编译器应该告诉你。您正试图将stack分配给array。将dmat的类型更改为vector<lifo>,就可以将一个lifo复制到其中

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

是的,这给出了堆栈顶部数组的第二个元素。top()返回对该数组的引用,[1]可以对该数组进行索引。

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

否,sol[0] = lifo无效,因为您正试图将stack分配给array

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

相关内容

最新更新