c++ - 附加到具有非动态分配堆栈的 vector

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

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

最佳答案

当您push_back() 堆栈元素到 vector 时,元素按值传递给 vector ,而不是作为引用,所以即使在函数定义之后堆栈元素被销毁, vector 已经有值了。

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

关于c++ - 附加到具有非动态分配堆栈的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040169/

相关文章:

C++ 无法修改类的实例

c++ - 简单的 C++ 程序在使用节点指针时崩溃

c++ - 搜索数据集的高效算法

c++ - std::all_of() 的多个 UnaryPredicates

python - 一线树实现

algorithm - 查询给定子集是否存在于集合集合中的数据结构

java - 在 Java 中处理大型字符串列表

c++ - 在默认参数上重载方法

c++ - 哪种获取成员方法更好?

c++ - Cout vector 地址