我必须处理几个函数,这些函数需要将数组堆栈作为参数。
这是一个例子:
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]
可以对该数组进行索引。
否,这是无效的,因为array2
和decltype(pila.top())
的类型不同:array<short,2>
不能隐式转换为array<int,2>
。如果您更改array2
的类型,那么您的程序在语义上是正确的。
否,sol[0] = lifo
无效,因为您正试图将stack
分配给array
是,pila.top()[1]
返回位于stack
顶部的array
的第二个元素。