std::vector<char> v{'1', '2', '3', '4'}; // A v.push_back('5'); // B
*v.end() == '4'
A和B位置v.capacity() 一定大于 v.size()
如果A位置v.size()与v.capacity()分别是4,4,那么B位置是5,5
如果A位置v.size()与v.capacity()分别是4,4,A位置&v[0]等于B位置的&v[0]
A:end()返回的迭代器一定指向vector中最后一个元素的后面,不管怎样都不会等于最后一个元素
end()
B:v.capacity()可能等于v.size()
v.capacity()
v.size()
C:每次一扩容都是原来容量的两倍,因此B位置应该是5,8(根据编译器的不同可能不一样,反正不会只扩容一个元素的大小,除非capacity从0扩容到1)
D:因为发生了扩容:申请一块更大的连续空间->将原来空间的所有元素复制过去->释放原来的空间,两块连续空间在内存中的不同位置,那么地址当然发生了变化
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题