我是c ++的新手,只是学习堆栈推送和弹出操作。我编写了一个小程序来推送和弹出堆栈中的一些元素。我的示例程序如下:
-- Install configuration: "Debug"
CMake Error at cmake_install.cmake:31 (file):
file cannot create directory: C:/Program Files (x86)/cmakeTesting/bin.
Maybe need administrative privileges.
但是现在我想将多个3 * 3矩阵推入堆栈并希望使用mystack.top()获取每个矩阵,并使用mystack.pop操作弹出每个矩阵并显示整个矩阵。如何实现多个矩阵运算的堆栈?
样本矩阵可以是这样的:
// stack::push/pop
#include <iostream> // std::cout
#include <stack> // std::stack
int main ()
{
std::stack<int> mystack;
for (int i=0; i<5; ++i) mystack.push(i);
std::cout << "Popping out elements...";
while (!mystack.empty())
{
std::cout << ' ' << mystack.top();
mystack.pop();
}
std::cout << '\n';
return 0;
}
答案 0 :(得分:2)
您可以使用std::array<std::array<float,3>,3>
。普通数组不会自动复制,也不符合std::queue
中存储的数据类型的需要:
std::array<std::array<float,3>,3> A {{{1.0,2.0,3.0},{1.0,2.0,3.0},{1.0,2.0,3.0}}};
std::array<std::array<float,3>,3> B {{{1.0,2.0,4.0},{1.0,5.0,3.0},{8.0,2.0,3.0}}};
然后您可以简单地将堆栈定义为:
std::stack<std::array<std::array<float,3>,3>> myStack;
为了使其更具可读性和更易于输入,您可以使用using
或typedef
:
typedef std::array<float,3>,3> My3x3Matrix;
// ...
std::stack<My3x3Matrix> myStack;
myStack.push(A);
// ...
My3x3Matrix C = myStack.top();
myStack.pop();
答案 1 :(得分:1)
为什么不使用Boost.MultiArray
?
此库中的类实现了一个通用的接口,形式化 作为通用编程概念。界面设计符合 C ++标准库容器设置的先例。 与现有替代方案相比,Boost MultiArray是一种表达N维数组的更有效和方便的方法(尤其是N维数组的std :: vector&gt;)。
http://www.boost.org/doc/libs/1_61_0/libs/multi_array/doc/user.html
然后听起来你想拥有以下stack
。
typedef boost::multi_array<int, 3> array_type;
std::stack<array_type> s;