使用堆栈作为cpp中的struct元素

问题描述 投票:0回答:2

我最近正在做一个项目,偶然发现以下情况

using namespace std;

//I have two structs, A basic struct as shown below
struct myAnotherStruct{
  int x;
  int y;
};

//A struct which embeds the stack of above struct type
struct myStruct{
  int a;
  float b;
  stack <myAnotherStruct> s;
};

//Somewhere else in the code, I created this
stack <myStruct> t;

//And performed following
struct myAnotherStruct var;
var.x = 10;
var.y = 20;

// But, when I performed the following operation, there was a core Dump!
t.s.push(var)

现在,我的问题是,

  1. 为什么要进行核心转储?每次添加新元素时都不应分配内存吗? var应该被复制,变量的存储类(在我的情况下是var)应该没有关系!

  2. 做这样的事情好吗?因为当我谷歌搜索时,我总是得到“结构堆栈,结构向量”等,但不是这样(即堆栈结构)。

c++ struct stl stack
2个回答
2
投票

您正在创建myStruct而不是myStruct实例的堆栈。

//Somewhere else in the code, I created this
stack <myStruct> t;

您需要将其更改为:

myStruct t;

在原始代码中,由于stack在此处没有成员s,因此编译器应生成错误:

// But, when I performed the following operation, there was a core Dump!
t.s.push(var)

1
投票

这里的问题是,您尝试访问堆栈中的元素而没有像这样将项目推入堆栈中:

myStruct m;  // Creates new myStruct object 
t.push(m);   // Adds object to stack

此外,.运算符不会自动获取堆栈中的顶部对象。如果要将var添加到s中的成员变量t中,请考虑使用t.top().s.push(var);获取堆栈的顶部元素,然后将car推入堆栈。

© www.soinside.com 2019 - 2024. All rights reserved.