分配给尚未调整大小但保留被称为合法的向量元素?

时间:2013-10-31 16:27:23

标签: c++ vector

简单问题:

vector<int> vi;
vi.reserve(1984);
vi[84] = 1900;

这合法吗? 注意我们在这里讨论的不是一些Widget,它的dtor可能会引起混乱,因为它认为84位的元素正在被破坏,而在pos 84则只有随机(或者可能是零d)的内存。

1 个答案:

答案 0 :(得分:2)

不,这不合法。只有0size()-1(当vector不为空时)才允许访问元素。如果它为空,则不允许访问不存在的元素。

对于int这没有多大意义,但对于UDT T,它是能够容纳T的内存块之间的差异(那是reserve() 1}}提供)和T的实际实例,仅当它位于0size()-1的有效范围内时才会出现。