当向量变满时,它会被重新分配,并且所有迭代器和指向元素的指针都将失效。如果使用new
创建向量,这种行为是否会发生变化?
std::vector<int>* v = new std::vector<int>(); //What happens if this vector gets reallocated?
我能否通过指针获取对象(作为另一个变量),还是必须将其复制到另一个对象中?
当向量变满时,它会被重新分配,并且所有迭代器和指向元素的指针都将失效。如果使用new
创建向量,这种行为是否会发生变化?
std::vector<int>* v = new std::vector<int>(); //What happens if this vector gets reallocated?
我能否通过指针获取对象(作为另一个变量),还是必须将其复制到另一个对象中?
v
没有被销毁,std::vector
类模板包装的底层数组就处于良好状态,无论是否重新分配内存。std::vector
重新分配其内部存储而“丢失”了一个非动态对象? - Angew is no longer proud of SOstd::vector
对象是安全的(虽然不寻常)。std::vector
对象本身的分配方式不会影响其迭代器的有效性等。它们仍然会因为 std::vector
的内部数据存储的重新分配而失效。*v
将给您一个动态分配的向量的引用。它没有复制任何东西。例如,(*v)[3]
将给您向量中索引为 3
的 int
。T&
。但从英语单词的一般意义上来说,没错。 :)出于这个原因,我更喜欢使用“别名”或“句柄”。 - Lightness Races in Orbit使用new是安全的,但并不能解决您在动态重新分配方面遇到的问题。向量对象承诺存储空间的连续性,因此您无法做太多事情。在某些操作之后,您可能不再依赖迭代器。为了防止在未知时间进行动态重新分配,请明确使用reserve()或resize()。
new
来创建一个向量呢?我猜如果你已经在使用向量,你可能只是想创建一个向量的向量。这是你的意思吗? - Patrick87