我总是使用resize(),因为我不能使用reserve,因为它给出了错误:向量下标超出范围.当我读到有关resize()和reserve()的差异的信息时,我看到像reserve()这样的东西设置了最大值.可以分配元素的数量,但resize()是我们现在拥有的.在我的代码中我知道max.元素的数量,但reserve()并没有给我任何有用的东西.那么,我怎样才能使用reserve()?
向量具有一个容量(由返回的capacity()和一个大小(由返回)返回size().第一个表示向量可以容纳多少元素,第二个表示当前持有多少元素.
resize改变大小,reserve只改变了capacity.
至于用例:假设您事先知道要放入多少元素vector,但是您不想初始化它们 - 这就是保留的用例.假设你的矢量之前是空的; 然后,reserve()在执行任何操作之前insert或之后push_back,您可以直接访问与保留空间一样多的元素 - 这将触发上述错误(下标超出范围) - 因为您尝试访问的元素是尚未初始化; 所述size仍为0.因此,向量仍是空的; 但如果您选择保留容量的方式使其高于或等于矢量将获得的最大大小,则可以避免昂贵的重新分配; 同时你也将避免调整大小的每个向量元素的初始化(在某些情况下是昂贵的).
随着resize,在另一方面,你说:请矢量持有一样多的元素给了我作为一个参数; 初始化索引超过旧大小的索引,或删除超过给定新大小的索引.
请注意,reserve将绝不会影响目前在向量中的元素(除了他们的存储位置,如果需要重新分配-而不是它们的值或者它们的数量)!这意味着如果向量的大小当前大于传递给同一向量上的保留函数的调用,则保留将不执行任何操作.
另见这个问题的答案:vector :: resize()和vector :: reserve()之间的选择
| 归档时间: |
|
| 查看次数: |
2339 次 |
| 最近记录: |