【问题标题】:Implementing a generic collection for a Stack为 Stack 实现通用集合
【发布时间】:2019-02-21 21:21:49
【问题描述】:

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

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 \n”;

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

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

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

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

【问题讨论】:

  • 你的代码在几个方面仍然是错误的。 c++ 区分大小写。此外,在类型和变量之间还有一个额外的 string。即使已修复,第二个示例仍然是错误的,因为您不会使用 new。我现在和@FrançoisAndrieux 一起讨论这个问题。我不确定你想要什么,因为代码太错误了。
  • 新的编辑更清晰了吗? @drescherjm
  • Stack&lt;string&gt; stringStack = new Stack&lt;string&gt;(); 可能是非法的。
  • stack&lt;std::string&gt;* stringStack = new Stack&lt;std::string&gt;(); 你正在混合stack&lt;std::string&gt;Stack&lt;std::string&gt;()c++ 会将它们识别为两种不同的事物,因为语言区分大小写。
  • 除了这些错误之外,您知道带星号和不带星号的两个区别是什么吗?它们是否用于不同的场景? @drescherjm

标签: c++ pointers stack


【解决方案1】:

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

那是你的问题。不要去网上搜索和复制/粘贴你不明白的代码。那是在你毕业之后的

我找到了代码

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

那不会编译。 new 用于进行动态分配,并返回一个指针。您在左侧 (Stack&lt;string&gt; stringStack) 所拥有的不是指针。

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

动态内存分配必须成对进行...newdelete,否则会泄漏。简要演示:

{ // 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?

我要重申,您能为自己做的最好的事情就是不要试图通过在 Internet 上搜索解决方案来走捷径。从一开始就关注你的课程,如果你觉得你的课程或教授有欠缺,那么你可以自己通过a good book 来补充你的教育。

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多