我正在C++中製作玩具編程語言,但我遇到了一個問題。我注意到,在C++中,堆棧只能存儲一種類型的數據。我想知道是否有一個簡單的方法來解決這個問題,比如通過在堆棧中存儲每個對象的字節數組。我想知道是否有人知道jvm如何克服這個問題。我需要在棧上存儲的類型是char,short,int,float,double,strings,數組和對象的引用。我知道jvm堆棧可能更像是一種抽象,但如果是這樣的話,我仍然想知道它們是如何實現它的。如果它有什麼區別,我只打算瞄準Windows電腦。使用堆棧實現C++
0
A
回答
3
你知道C++支持繼承和多態,對吧?一種遠更簡單的方法做,這是從一個共同的基類派生的所有您的令牌,並Base *
物品堆,比如:
#include <iostream>
#include <string>
#include <stack>
#include <memory>
class base {
public:
virtual void print_token() = 0;
virtual ~base() {}
};
class token_a : public base {
public:
token_a(int n) : n(n) {}
virtual void print_token() { std::cout << n << std::endl; }
private:
int n;
};
class token_b : public base {
public:
token_b(std::string s) : s(s) {}
virtual void print_token() { std::cout << s << std::endl; }
private:
std::string s;
};
int main(void) {
std::stack<std::shared_ptr<base> > my_stack;
my_stack.push(std::shared_ptr<base>(new token_a(5)));
my_stack.push(std::shared_ptr<base>(new token_b("a word")));
for (int i = 0; i < 2; ++i) {
std::shared_ptr<base> pb = my_stack.top();
pb->print_token();
my_stack.pop();
}
return 0;
}
輸出:
[email protected]:~/src/cpp/scratch$ ./stack
a word
5
[email protected]:~/src/cpp/scratch$
2
我已經解決了這個問題(在C,對於口齒不清interpretr,大約25年前,但同樣的想法適用於今天)的方法是有一個struct
與類型和union
裏面:
struct Data // or class
{
enum kind { floatkind, intkind, stringkind, refkind };
Kind kind;
union
{
double f;
int i;
std::string s;
Data* r; // reference, can't use Data &r without heavy trickery.
} u;
Data(double d) { kind = floatkind; u.f = d; }
Data(int i) { kind = intkind; u.i = i; }
...
}
std::stack<Data> st;
st.push(Data(42));
st.push(Data(3.14));
0
只是一個猜測,但是jvm可能會將所有對象視爲對象,所以堆棧僅僅是對象的集合。
如果您創建基礎數據對象類並從中派生所有受支持的數據類型,則可以這樣做。
相關問題
- 1. C++堆棧實現
- 2. 使用數組的C++實現堆棧
- 3. 使用BST實現堆棧
- 4. 在C++中實現堆棧
- 5. 在C++中實現堆棧
- 6. 在c中實現堆棧
- 7. C中的堆棧實現
- 8. C堆棧數組實現
- 9. 堆棧實現
- 10. c中的實現通用堆棧
- 11. 通用堆棧實現
- 12. 用Python實現堆棧
- 13. 使用鏈接列表實現堆棧
- 14. 使用指針實現堆棧
- 15. 使用2個隊列實現堆棧
- 16. 使用堆棧實現數組
- 17. 使用2堆棧實現隊列
- 18. 使用堆棧快速排序實現
- 19. C中堆棧的數組實現
- 20. 實現C++中的INT堆棧
- 21. 在C++中實現泛型堆棧
- 22. C++堆棧實現意外輸出
- 23. C++:使用堆棧
- 24. 在c中使用數組實現通用堆棧#
- 25. 在MySQL中實現堆棧
- 26. 在java中實現堆棧
- 27. 實現無堆棧的Python
- 28. 簡單堆棧實現
- 29. Python TCP堆棧實現
- 30. java.lang.ArrayIndexOutOfBoundsException:0(堆棧實現)
C++可以用'std :: stack>'來做到這一點。 –
chris
通常,在大多數語言中,這是通過存儲更多的數據而不僅僅是數據本身來解決的。諸如堆棧上的「類型標識」(例如枚舉)。 –
我如何使用視覺工作室快速增強 – Popgalop