我找不到这条信息。我正处理一个奇怪的情况,我在一个循环中,我可以在任何给定的时间获得随机信息。该信息必须存储在矢量中。现在每个帧我必须设置这个向量,以确保我不会占用空间(我正在使用索引将值写入向量中的随机点)。
现在假设没有办法改变这段代码,我想知道,如果我发送的参数恰好是向量的大小,那么向量是否“忽略”resize()函数?我在哪里可以找到这些信息?
答案 0 :(得分:9)
来自MSDN参考1
如果容器的大小小于请求的大小_Newsize,则元素将添加到向量中,直到达到请求的大小。如果容器的大小大于请求的大小,则删除最靠近容器末尾的元素,直到容器达到_Newsize大小。如果容器的当前大小与请求的大小相同,则不采取任何措施
ISO C ++标准(第485页2)为vector::resize
void resize ( size_type sz , T c = T ());
if ( sz > size ())
insert ( end () , sz - size () , c );
else if ( sz < size ())
erase ( begin ()+ sz , end ());
else
; // Does nothing
所以是的,矢量忽略了它,你不需要自己进行检查。
答案 1 :(得分:0)
有点儿-几分。
简单地使用resize()调整向量大小只会导致向量本身使用更多内存(将改变其元素使用的内存量)。如果预留空间中没有足够的空间,它将重新分配(有时他们喜欢自己填充一点,即使你有可能增长)。如果已经有足够的空间容纳所要求的尺寸以及它想做的任何填充,它就不会再生。
当规范说明超出大小结尾的元素将被删除时,它意味着到位。基本上它会为它正在删除的每个元素调用_M_buff [i] .~T()。因此,假设一个正在运行的析构函数,你的对象分配的任何内存都将被删除,但是对象本身占用的空间(它的大小)将不会被删除。矢量将会生长,生长,并且会增长到您告诉它的最大尺寸,并且在它存在时不会再收缩。