附加到具有非动态分配堆栈的向量
Appending to vector with non-dynamically allocated stack
我正在研究一个编码问题,为了解决这个问题,我正在创建自己的数据结构 (class),"SetOfStacks",它的成员是堆栈向量。在 SetOfStacks 的成员函数之一中,我需要使用 push_back() 函数扩展向量。为此,我在成员函数中声明了一个堆栈变量(非动态),然后将该变量传递给 push_back().
代码工作正常,但我不明白为什么。我认为在成员函数完成执行后,堆栈变量将超出范围(因为它不是动态分配的),结果向量将包含垃圾。我认为解决方案是使用动态分配的内存。为什么这行得通?我最好的假设是 push_back() 按值而不是按引用接收新堆栈,从而有效地创建它的新副本。任何帮助表示赞赏!
当您 push_back()
将堆栈元素传递给向量时,元素按值传递给向量,而不是作为引用,因此即使在函数定义之后堆栈元素被销毁,向量已经取到值了
这可以与从函数到调用者的 return 值相关联。即使 return 值是函数堆栈的局部值(即它将在函数执行后被销毁),return 值在被销毁之前被复制到调用函数。
我正在研究一个编码问题,为了解决这个问题,我正在创建自己的数据结构 (class),"SetOfStacks",它的成员是堆栈向量。在 SetOfStacks 的成员函数之一中,我需要使用 push_back() 函数扩展向量。为此,我在成员函数中声明了一个堆栈变量(非动态),然后将该变量传递给 push_back().
代码工作正常,但我不明白为什么。我认为在成员函数完成执行后,堆栈变量将超出范围(因为它不是动态分配的),结果向量将包含垃圾。我认为解决方案是使用动态分配的内存。为什么这行得通?我最好的假设是 push_back() 按值而不是按引用接收新堆栈,从而有效地创建它的新副本。任何帮助表示赞赏!
当您 push_back()
将堆栈元素传递给向量时,元素按值传递给向量,而不是作为引用,因此即使在函数定义之后堆栈元素被销毁,向量已经取到值了
这可以与从函数到调用者的 return 值相关联。即使 return 值是函数堆栈的局部值(即它将在函数执行后被销毁),return 值在被销毁之前被复制到调用函数。