首页 > 试题广场 >

下列选项哪些是正确的

[单选题]
下列选项哪些是正确的
  • 对于unordered_map和map这两个容器,迭代器的有效性皆不受删除操作影响
  • 对于unordered_map和map这两个容器,迭代器的有效性皆不受插入操作影响
  • 为了保证代码的异常安全性,应该避免在构造函数中抛异常
  • 为了保证代码的异常安全性,应该避免在析构函数中抛异常
此题答案有误.  正确答案 应该为AD
map 均不受影响
对于 unordered_map, 底层是hash_table  插入元素会导致迭代器失效。
http://en.cppreference.com/w/cpp/container/unordered_map/erase
References and iterators to the erased elements are invalidated. Other iterators and references are not invalidated.

http://en.cppreference.com/w/cpp/container/unordered_map/insert
If rehashing occurs due to the insertion, all iterators are invalidated. Otherwise iterators are not affected. References are not invalidated. Rehashing occurs only if the new number of elements is greater than max_load_factor( ) *bucket_count( ) .


对于被删除的元素的迭代器,都是会失效的。
编辑于 2016-04-01 17:34:07 回复(3)
答案应该为D。
http://www.cplusplus.com/reference/map/map/erase/ 查看下边iterator validity这项。同理可以看到map的insert,unorder_map的insert和erase操作的这项属性。
A选项:当unorder_map和map某迭代器it指向的元素被删除时,只有该迭代器it失效,其他的迭代器不会失效。
B选项:map插入时不会引起迭代器失效;unorder_map插入时一般情况下不会引起迭代器失效,只有当容器增长到需要rehash时,原来的所有迭代器失效。
C选项:构造函数抛出异常后,已经构造的成员对象会被逆序析构,申请的内存资源会被系统释放,不会调用析构函数。而且构造函数抛出异常是唯一表明构造失败的方法。
D选项:effective C++“条款08:别让异常逃离析构函数”指出来如果析构函数抛出异常,对于vector<Widget>这样的一个对象数组,如果第一个Widget析构有异常抛出,这时候还要销毁数组中剩下的Widget否则会造成内存泄漏,但是如果剩下的Widget析构时也抛出异常,就会两个异常同时存在,程序如果不是结束执行就会产生不明确行为。即使不是使用容器或数组,在析构函数中抛出异常也可能导致程序过早结束或不明确行为。
发表于 2016-04-22 13:50:06 回复(3)
都屏蔽了,你还出来
发表于 2020-05-31 16:06:45 回复(0)
构造函数抛出异常后,已经构造的成员对象会被逆序析构,申请的内存资源会被系统释放,不会调用析构函数,而且构造函数抛出异常是唯一表明构造失败的方法;
发表于 2018-09-21 15:46:57 回复(0)
析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。
发表于 2023-03-25 19:52:17 回复(0)
选D
若在析构函数中抛异常,则对象会不完全析构,会造成内存泄露问题
发表于 2020-07-18 06:48:50 回复(0)
什么是惜购?
发表于 2020-04-09 09:27:40 回复(0)
我滚去学习了
发表于 2019-09-24 00:06:39 回复(0)
A.被删除的迭代器元素会失效
B.当需要再哈希时,所有迭代器失效。
发表于 2017-08-03 23:09:37 回复(0)
若在析构函数中抛异常,则对象会不完全析构,会造成内存泄露问题
发表于 2017-07-29 16:05:01 回复(0)
https://msdn.microsoft.com/zh-cn/library/windows/apps/bb982522(v=vs.120)
发表于 2016-08-04 19:52:12 回复(0)
正确答案是D吧! B当插入要用到rehash时,迭代器还是会失效的
发表于 2016-05-05 17:12:25 回复(0)
http://blog.csdn.net/stpeace/article/details/46507451 map的iterator有效性受到删除的影响(见链接) 答案应该为D
编辑于 2016-04-01 17:15:07 回复(0)