2D矩阵的推送和弹出操作,并用C ++显示

时间:2016-10-12 13:50:20

标签: c++ matrix stack

我是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;
} 

2 个答案:

答案 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;

为了使其更具可读性和更易于输入,您可以使用usingtypedef

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;