向量保留( )方法的行为
Behavior of vector's reserve( ) method
我想知道std::vector::reserve()
在以下情况下的行为:
- 假设CCD_ 2立即被多次调用。早期的
reserve(N1)
会被添加或覆盖吗 - 如果较早的CCD_ 4被最新的呼叫覆盖,那么如果最新的CCD_ 5需要更少数量的时隙,会发生什么
- 在声明CCD_ 6之后,如果我们具有简单的CCD_,然后我们调用CCD_ 8。已经
push_back()
XN
中计数的元素 - 假设,如果
vector
有一些X推动的元素,现在如果push_back()
再增加1个元素(X+1),则该对象必须搬迁;但我们还没有执行CCD_ 13。什么如果我们现在调用reserve()
会发生什么?物体会被重新定位吗立即如果没有,那么如何保留空间
reserve()
只是确保向量分配的内存至少足够大,足以包含作为其参数传递的项目数。因此
- 无论通过的所有容量的最大值是哪一个,都将是有效保留的最小容量
- 参见#1
- 是的
- 当调用
reserve()
时,矢量分配与存储传递给reserve()
的项目数所需的内存一样多的内存
引用实际标准:
void reserve(size_type n)
如果
n
小于或等于capacity()
,则此调用无效。否则,它就是一个分配额外内存的请求。如果请求成功,则reserve(N)
0大于或等于n
;否则capacity()
不变。在任何一种情况下,size()
都是不变。
假设CCD_ 24立即被多次调用。早期的
reserve(N1)
会被添加或覆盖吗?
与std::string
不同,std::vector
不可能调用reserve()
来收缩capacity()
。使用小于当前capacity()
的自变量调用reserve()
是不可行的。因此,增加当前容量的最后一个CCD_ 32呼叫将保持良好。
如果较早的
reserve(N1)
被最新的调用覆盖,那么如果最新的reserve(Nn)
需要更少的插槽数,会发生什么?
使用小于当前capacity()
的参数调用reserve()
是否定的。
在声明vector之后,如果我们有简单的push_back()X元素,那么我们调用reserve(N)。已经push_back()的X元素会以N计数吗?
reserve()
只是分配(保留)了足够数量的元素,所以是。注意,在调用reserve()
之后,仅矢量的capacity()
被改变,reserve(N1)
0保持不受影响。如果您需要创建尽可能多的元素,而不仅仅是保留内存,那么您应该使用resize()
。
假设,如果向量有一些
X
推送的元素,现在如果我们再push_back()
1个元素(X+1)
,那么该对象将不得不重新定位;但我们还没有执行CCD_ 45。如果我们现在调用reserve()
会发生什么?物体会立即被重新定位吗?如果没有,那么如何保留空间?
是的,搬迁会发生,但要视情况而定。如前所述,reserve()
分配了足够的内存来存储与传递给它的参数一样多的元素。因此,如果元素的数量大于当前向量capacity()
中可以容纳的数量,则会发生重新定位。
标准参考:
C++03 23.2.4.2矢量容量[lib.vvector.C容量]
void reserve(size_type n);
效果:一个指令,通知向量计划的大小更改,以便它可以相应地管理存储分配。在
reserve(Nn)
0之后,如果发生重新分配,则capacity()
大于或等于保留的自变量;否则等于CCD_ 52的先前值。当且仅当当前容量小于reserve()
的自变量时,此时才发生重新分配。复杂性:它不会改变序列的大小,并且最多需要序列大小的线性时间。
投掷:如果
n > max_size()
.248),则为length_error注意:重新定位将使引用序列中元素的所有引用、指针和迭代器无效。保证在对
reserve()
的调用之后发生的插入期间不会发生重新分配,直到插入将使向量的大小大于对reserve()
的最近调用中指定的大小为止。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 从浮点数中删除小数部分但保留类型的有效方法
- 保留计时器集合(对象与指针)的最佳方法
- 在 push_back() 之前保留非空 std::vector 的正确方法
- 如果其他人在等待,是否有标准的STL或QT方法可以产生互惠码,否则请保留它
- 为什么 std::unordered_map 有保留方法?
- 保留动态分配的数组而不为删除而烦恼的最佳方法
- 是否可以在不声明其方法的情况下保留裸类定义?
- 有没有一种方便的方法可以从属性树中删除节点,同时保留其子节点
- 在visual studio C++中,有没有任何方法可以在运行时增加堆栈保留大小
- 有没有一种方法可以保留C++中以前递归的数据(具体示例)
- JNI保留对对象的全局引用,并使用其他JNI方法访问它.在多个JNI调用中保持C++对象的活动状态
- 开发简单GUI的最佳方法,同时保留本机C++的功能
- 向量保留( )方法的行为
- 在main中调用类方法,更改不会在类方法之外保留?
- 在不同的文件上有C++类的任何方法都可以将方法定义保留在类中