首页 > 试题广场 >

关于下面代码,哪些描述是错误的std::vector...

[不定项选择题]
关于下面代码,哪些描述是错误的()
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]
我选B是针对上面的代码执行完之后v.capacity() 一定大于 v.size()
发表于 2020-12-09 15:55:04 回复(0)
D选项,如果size超过了预先分配的capacity,会重新分配一块增大了的内存(可能增加了原先的一半),,把数据复制到新地址,释放旧地址,所以起点可能会不一样。
发表于 2017-08-31 14:52:54 回复(2)

A:end()返回的迭代器一定指向vector中最后一个元素的后面,不管怎样都不会等于最后一个元素

B:v.capacity()可能等于v.size()

C:每次一扩容都是原来容量的两倍,因此B位置应该是5,8(根据编译器的不同可能不一样,反正不会只扩容一个元素的大小,除非capacity从0扩容到1)

D:因为发生了扩容:申请一块更大的连续空间->将原来空间的所有元素复制过去->释放原来的空间,两块连续空间在内存中的不同位置,那么地址当然发生了变化

发表于 2022-04-11 09:21:55 回复(0)
正确答案的确是A,B,C,D
A,vector push_back操作会在数据最后添加元素,所以*v.end() == '4'
B,vector大小,初始化时指定多大就是多大
C,vector会根据初始化的值,指定大小,后面push_back会调整vector数组大小
D ,如同 “咿呀0”所解释的那样

发表于 2017-09-07 22:45:07 回复(7)
B选项,数学意义上讲v.capacity()应该是一定大于等于v.size().
发表于 2017-09-02 08:33:20 回复(2)
vector是动态扩展,不是直接在后面增加,是找一块新的更大的内存,拷贝原来的进来,进行扩充
发表于 2022-06-09 23:17:42 回复(0)
醉了,B选项都没说是A位置还是B位置,害我纠结。
发表于 2017-09-01 20:52:06 回复(0)
A.v.end()是指向末元素后面的位置
B.可能等于
C.capacity()满了后,会容量翻倍
D.容量翻倍扩容后,指向新空间
发表于 2023-11-09 15:47:23 回复(0)
我记得侯捷老师的课说过vector的大小是成倍增长的,因为是连续空间,如果位置不够就会到别的更大的空间来装
发表于 2023-02-28 21:12:45 回复(0)
A选项:在A位置处:v.end()==4",在B位置处:v.end()==5";
B选项:向量(vector)的capactiy(容量:允许存储的数据数量)大于等于size(大小:已存储的数据数量)
C选项:如果A位置分别是4,4,那么B位置处的size是5,但是capacity不是5,因为在A处测试时,Vector的容量是4,再push_back数据时,容量一定会增加(一般增加原来的一半,具体要看底层实现)
D选项:接C选项,当容量增加时,实际过程上是新开辟一块更大的内存,并将之前的数据传到新开辟内存的向量中,这也是为什么说使用向量时,效率不如数组高的原因。
(如有错误,欢迎指正,一起提高!)
发表于 2022-04-25 21:54:20 回复(4)
A选项  v.end()不是4么   怎么能是5呢
发表于 2017-09-05 16:22:32 回复(10)
这也不是C语言啊
编辑于 2024-02-29 14:51:00 回复(0)
请问这题是没有考虑连续空间不足的情况吗?如果连续空间不足,这种线性表会被整体剪切下来,移动到新的足够大的连续空间去,这时的整体地址均会改变,谈何首地址相等呢?欢迎反驳。
发表于 2023-05-17 12:16:47 回复(0)
capacity按照题上面来说vector的效率极低,插入一个开一个空间,每次都要向编译器-->os要资源。
发表于 2022-09-23 08:41:20 回复(0)
B选项, 为什么不会相等
发表于 2021-02-25 22:50:44 回复(0)
哪个大神等把这个题讲清楚
发表于 2021-01-20 12:21:44 回复(0)