【发布时间】:2016-08-16 10:25:33
【问题描述】:
我有一个std::vector,我在上面调用reserve,价值很大。然后我检索data()。
由于迭代 data 会崩溃,我想知道这是否被允许。 reserve 是否强制更新 data 到分配的内存范围?
【问题讨论】:
-
为什么是
reserve而不是resize?reserve只分配内存,resize在里面构造对象。 -
我们可以看看你的代码吗?
-
@n.m 调整大小可能非常昂贵。 Reserve 将保证您以后可以放置对象。
-
请注意,即使
data()有效并且在向量末尾之外分配了内存,您仍然无法保证您被允许访问该内存.例如可以想象,vector实现将该内存用于簿记或其他目的。 -
这个问题:stackoverflow.com/questions/25419851/…,讨论了在空向量上调用 data() 时会发生什么。 (你的向量是空的,因为 reserve() 不会改变大小。)似乎某些实现会返回一个 nullptr。
标签: c++ vector language-lawyer stdvector