【问题标题】:C++, stack and pointers of structC ++,结构的堆栈和指针
【发布时间】:2016-08-18 00:18:12
【问题描述】:

您好,我对堆栈中结构的指针有疑问。

我有一堆结构体:

stack<Somethink*> stack1;

我想推送和弹出“Somethink”数组

void Search(Somethink* array_Somethink, int s, int d,) {

stack1.push(&(array_Somethink[s]));  // 

while (stack1.size() != 0) {
    int  i = 0;

    array_Somethink[i] = *(stack1.pop()); // this return a error
    i++;
   }
}

我希望有人能给我一个提示,如何正确地从这个堆栈中推送和弹出

谢谢 :D

【问题讨论】:

标签: c++ struct stack


【解决方案1】:
void Search(Somethink* array_Somethink, int s, int d,) {

stack1.push(&(array_Somethink[s]));  // 

while (!stack1.empty()) {
    int  i = 0;

    array_Somethink[i] = *(stack1.top());
    stack1.pop();
    i++;
   }
}

我修改后的代码假设,您在其他地方拥有指向堆栈上元素的“拥有”指针。如果不是这种情况,您将在此处以内存泄漏告终,因为堆栈中的指针变成悬空对象(泄漏)。

为了避免潜在的内存泄漏,在这里,最好使用std::shared_ptr&lt;Somethink&gt; 而不是原始指针。然后,您的堆栈将变为std::stack&lt; std:shared_ptr&lt;Somethink&gt; &gt;

有关 std::stack 操作empty(),pop(),top() 的详细信息,请参见通常位置的std::stack

在那里,你会找到这样的解释:

std::stack::top C++ 容器库 std::stack 参考顶部(); const_reference top() 常量; 返回对栈顶元素的引用。这是最近推送的元素。这个元素将在调用 pop() 时被删除。有效地调用 c.back()。

【讨论】:

  • 嗯,只有代码。添加一些关于pop()签名的解释,以及top()实际上做了什么。
  • 你能告诉我 .top() 是做什么的吗?这有效,它是正确的答案! :)
【解决方案2】:

top 将返回一个指向该结构的指针,并且您正试图将它分配给该结构的一个实例。基本上,您正在尝试将指向 Somethink 的指针分配给 Somethink 的数组中的位置

【讨论】:

  • AFAIR pop() 什么都不返回 (void),但 top()/front() 分别返回。
  • 谢谢你,这非常有用:)
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 2018-08-25
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2015-08-05
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多