为Stack实现泛型集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为Stack实现泛型集合相关的知识,希望对你有一定的参考价值。

在创建堆栈时指定数据类型时,我遇到了两种不同的实现。

stack<string>* stringStack = new Stack<string>();

Stack<string> stringStack = new Stack<string>();

指针对堆栈做了什么?

例如,我的教授为我们提供了代码:

stack<std::string>* stringStack = new Stack<std::string>();

stringStack->push(“Jim”);
std::string top = stringStack->peek();
std::cout << top << “ is at the top of the stack 
”;

在这里,我的教授使用了第一个场景。

当我在网上搜索解决方案时,我找到了代码

Stack<string> stringStack = new Stack<string>();
stringStack.push(17);        
int a = stringStack.pop(); 

我很困惑,区别于什么。如果有人可以向我解释有什么区别,如果有或没有,那就太好了!

答案

当我在网上搜索解决方案时

这就是你的问题。不要搜索互联网并复制/粘贴您不理解的代码。那是你毕业后的。

我找到了代码

Stack<string> stringStack = new Stack<string>();
stringStack.push(17);        
int a = stringStack.pop();

那不会编译。 new用于执行动态分配,并返回指针。左边有什么(Stack<string> stringStack)不是指针。

您看到左侧注释的“神秘”*(在正确的代码中)表示指针。当它不是类型的一部分时,它是一个解引用运算符,这意味着“查找此指针指向的内容”。

动态内存分配必须成对完成...一个new和一个delete,否则你会泄漏。简要说明:

{ // a scope begins
   int x = 10; // not a pointer; stack allocated
} // a scope ends, integer automatically is gone

{ // a scope begins
   int *px = new int; // px points to integer-sized memory box
   *px = 10; // put 10 into that box
} // a scope ends, you didn't delete px, you leaked memory

这里讨论是否应该动态分配某些东西的问题,也许你会在其中找到一些有价值的东西:

Why should I use a pointer rather than the object itself?

但是为了让你更加困惑,如果你的教授真正教授“现代C ++”,那么你会被警告不要随意使用原始指针:

What is a smart pointer and when should I use one?

我要重申,你能为自己做的最好的事情就是不要试图通过在互联网上搜索解决方案来实现捷径。从一开始就遵循你的课程,如果你觉得你的课程或教授缺乏,那么通过自己的a good book工作来补充你的教育。

以上是关于为Stack实现泛型集合的主要内容,如果未能解决你的问题,请参考以下文章

作业09-集合与泛型

C#中的常见集合类的比较

201621044079 韩烨作业09-集合与泛型

泛型ListHashTable

2. 背包,队列和栈

将泛型List<?> data集合转化为数组、Map