【问题标题】:Appending to vector with non-dynamically allocated stack使用非动态分配的堆栈附加到向量
【发布时间】:2018-06-10 22:21:10
【问题描述】:

我正在研究一个编码问题,为了解决这个问题,我正在创建自己的数据结构(类)“SetOfStacks”,它有一个堆栈向量作为成员。在 SetOfStacks 的成员函数之一中,我需要使用 push_back() 函数扩展向量。为此,我在成员函数中声明了一个堆栈变量(非动态),然后将该变量传递给 push_back()。
代码工作正常,但我不明白为什么。我想在成员函数完成执行后,堆栈变量将超出范围(因为它不是动态分配的),因此向量将包含垃圾。我认为解决方案是使用动态分配的内存。为什么这行得通?我最好的假设是 push_back() 通过值而不是通过引用接收新堆栈,有效地制作了它的新副本。任何帮助表示赞赏!

【问题讨论】:

  • push_back() 复制一份。

标签: c++ vector data-structures dynamic-memory-allocation


【解决方案1】:

当您push_back() 将堆栈元素传递给向量时,该元素通过值传递给向量,而不是作为引用,因此即使在函数定义之后堆栈元素被破坏,向量也得到了值已经。

这与从函数到调用者的返回值有关。即使返回值是函数堆栈的本地值(即在函数执行后将被销毁),返回值也会在被销毁之前复制到调用函数。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2019-05-17
    • 1970-01-01
    • 2012-03-02
    • 2020-09-15
    • 2012-03-19
    • 2010-12-11
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多