通过引用和动态分配传递向量
passing vectors by reference and dynamic allocation
如果我通过引用传递一个向量,并将新元素推送到向量,并且在我在函数中推送元素时它必须动态调整数组的大小,矢量现在会在不同的位置吗?程序如何确保它指向新的动态分配位置?它是否使用指向指向当前数组内存位置的指针的指针,该指针在调整大小后可以修改为指向引擎盖下的新连续内存位置?
void func(vector<int> &vect)
{
vect.push_back(30);
}
int main()
{
vector<int> vect;
func(vect);
}
答案是肯定的。您可以通过尝试找出代码示例中发生的情况来确认这一点。关键的见解是,任何非动态分配的内容在分配时都必须具有固定的大小。
你在这里没有指针,所以向量的核心数据结构是在堆栈上分配的,在那里它不能只是增长到堆栈中可能位于它之上的其他东西。例如,当你在 func()
中时,对 func
的函数调用位于向量变量顶部的堆栈上。如果不覆盖函数调用的堆栈帧,它就不可能在那里增长。如果这样做,您的程序在尝试从func
返回时会崩溃。
可能增长的唯一方法是,在内部,它根据需要在不同的位置动态分配内存。所以,这一定是引擎盖下发生的事情。
相关文章:
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 动态分配特征向量的模因
- 代码超出范围.如何动态分配此向量?
- 在读取大型 txt 文件时动态分配结构内的向量
- 通过引用和动态分配传递向量
- 是否可以动态分配向量?
- 附加到具有非动态分配堆栈的向量
- 使用嵌套向量动态分配方阵
- 如何释放动态分配的向量
- 如何在C++中使用"new"动态分配向量数组?
- 如何创建指向动态分配对象的指针向量
- 你能动态分配一个向量吗?
- 在C++中动态分配向量的安全方法是什么
- 动态分配随机特征向量Xd
- 另一个向量与动态分配的数组
- 对象的 C++ 向量,包含动态分配的内存 - "擦除"不起作用
- 将动态分配的变量移动到向量中
- 具有动态分配成员的结构体的向量
- 动态分配带有向量的结构
- 为什么valgrind显示泄漏,即使包含动态分配对象的向量被释放