简单问题:
vector<int> vi;
vi.reserve(1984);
vi[84] = 1900;
这合法吗? 注意我们在这里讨论的不是一些Widget,它的dtor可能会引起混乱,因为它认为84位的元素正在被破坏,而在pos 84则只有随机(或者可能是零d)的内存。
答案 0 :(得分:2)
不,这不合法。只有0
到size()-1
(当vector
不为空时)才允许访问元素。如果它为空,则不允许访问不存在的元素。
对于int
这没有多大意义,但对于UDT T
,它是能够容纳T
的内存块之间的差异(那是reserve()
1}}提供)和T
的实际实例,仅当它位于0
到size()-1
的有效范围内时才会出现。