"当我创建一个指向向量的指针时,指针会保留堆上向量的大小.
不,它没有!当您创建指向矢量的指针时,您有一个指针.而已.它还没有指向任何东西,它肯定没有为你保留任何"堆内存".
您仍然需要实际创建将指向的向量.
std::vector<int>* ptr1; // just a pointer;
ptr1 = new std::vector<int>(); // there we go;
delete ptr1; // don't forget this;
auto ptr2 = std::make_shared<std::vector<int>>(); // alternatively...
Run Code Online (Sandbox Code Playgroud)
你知道,你需要动态分配一个容器是非常罕见的.通常你只想以通常的方式构建它:
std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)
而已.不需要指针.
当我现在调整大小或推回向量时,指针现在仍然指向向量的整个内存或仅指向开头分配的内存吗?
无论你如何构造/分配它,向量本身都不会自发移动(只有内部为你管理的动态内存),所以你不必担心这一点.
我也想知道,如果你有一些技巧可以解决这个问题
没有必要,因为没有什么可以解决的.
"vector.reserve(n)"是一种实现此目的的方法吗?
从理论上讲,如果这是一个问题(事实并非如此)那么,是的,这可能构成解决方案的基础.