2016-10-12 41 views
2

我是新來的C++,只是學習堆棧推送和彈出操作。我寫了一個小程序來推送和彈出堆棧中的某些元素。我的示例程序如下:二維矩陣的push和pop操作並在C++中顯示它們

// 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; 
} 

但現在我想要把多個3×3的矩陣壓入堆棧,想用mystack.top(),以獲得他們每個人也使用mystack.pop彈出每個矩陣操作並顯示整個矩陣。我將如何實現多矩陣操作的堆棧?

樣品基體可以是這樣的:

float A[3][3]={{1.0,2.0,3.0},{1.0,2.0,3.0},{1.0,2.0,3.0}}; 
float B[3][3]={{1.0,2.0,4.0},{1.0,5.0,3.0},{8.0,2.0,3.0}}; 
+1

因此,您只需使用一些數據結構來表示3x3矩陣,而不是'int'作爲'std :: stack'的模板參數。 –

+0

聽起來像你需要做一個矩陣類。 – NathanOliver

+0

將存儲在堆棧中的類型更改爲您的矩陣類型。 – Rob

回答

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(); 
+0

出現如下錯誤:'std :: array ,3u>'| @πάνταῥεῖ – user6823702

+0

能否請您提供一個完整的2D矩陣上的推送和彈出操作代碼? @πάνταῥεῖ – user6823702

+0

@ user6823702對不起[fixed it](http://coliru.stacked-crooked.com/a/f85d5f9354da00a5) –

1

爲什麼不使用Boost.MultiArray

The classes in this library implement a common interface, formalized as a generic programming concept. The interface design is in line with the precedent set by the C++ Standard Library containers. Boost MultiArray is a more efficient and convenient way to express N-dimensional arrays than existing alternatives (especially the std::vector> formulation of N-dimensional arrays).

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; 
+2

我不認爲需要引入依賴來提升。 –

+1

@πάνταῥεῖ好吧,但讓這個人開始體驗與提升.. :) –

+1

我更喜歡讓他們開始在c + +標準的東西。 –