如果我使用reserve()为向量保留足够的元素,push_back()(或insert())会抛出任何异常吗?
是否有某个引用指定哪个stl函数抛出/不抛出任何异常?
谢谢。
答案 0 :(得分:5)
如果我使用reserve()为向量保留足够的元素,push_back()(或insert())会抛出任何异常吗?
它不需要执行重新分配,因此vector 本身不会抛出任何异常。但是,您插入的元素在复制到向量时可能会抛出异常,因此push_back
和insert
仍然会抛出异常。
是否有某个引用指定哪个stl函数抛出/不抛出任何异常?
是的,C ++标准包含该信息。
答案 1 :(得分:4)
当复制构造抛出时,我会说push_back
抛出。
现在,std::vector
的异常安全实施将保持vector
的状态,就像调用push_back
或insert
之前一样,以便您可以继续使用该对象
此外,请查看David Abrahams的Lessons Learned from Specifying Exception-Safety for the C++ Standard Library。
答案 2 :(得分:0)
我只能回答这两个问题中的第一个问题。
方法reserve(K)
在vector
上分配足够的空间以容纳K
元素,而无需进行昂贵的重新分配,但如果进行了足够的插入,则vector
的大小可能会增加