我必须处理几个需要作为数组堆栈参数的函数。
这是一个例子:
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 :(得分:1)
这是对的吗?我的意思是,我可以这样分配并返回堆栈中的元素吗?
现在你已经改变了匹配的类型,是的。这将在堆栈顶部返回数组的副本(而不是引用)。
在最初的问题中,没有;因为我相信你的编译器会说。 short
数组(top()
给你)和int
数组之间没有隐式转换(你尝试将其分配给它)。您可以按值或引用返回相同的数组类型;如果由于某种原因需要更改类型,请写一点转换函数。
这是对的吗?
sol[0]=lifo;
没有;再次,编译器应该告诉你。您正尝试将stack
分配给array
。将dmat
的类型更改为vector<lifo>
,您可以将lifo
复制到其中。
这种语法
pila.top()[1]
合法吗?
是的,这使得数组的第二个元素位于堆栈顶部。 top()
返回对该数组的引用,[1]
可以索引。
答案 1 :(得分:0)
不,这是无效的,因为array2
和decltype(pila.top())
的类型不同:array<short,2>
无法隐式转换为array<int,2>
。如果您更改array2
的类型,那么您的程序将在语义上正确。
不,sol[0] = lifo
无效,因为您尝试将stack
分配给array
是的,pila.top()[1]
会返回array
顶部stack
的第二个元素。